我正在尝试将数据从一个View Controller的文本字段传输到另一个视图的标签。
如何从另一个View Controller的代码中调用View Controller实例?我正在使用情节提要,因此从未在代码中创建视图控制器的实例吗?是否自动创建实例?他们叫什么名字?
谢谢你的帮助!
在您的项目中添加一个新的Cocoa Touch类文件,为其命名FirstViewController并在其中设置以下代码:
FirstViewController
import UIKit class FirstViewController: UIViewController { @IBOutlet weak var textField: UITextField! // FIXME: link this to the UITextField in the Storyboard!!! override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { let controller = segue.destinationViewController as! SecondViewController controller.text = textField.text } }
在您的项目中添加一个新的Cocoa Touch类文件,为其命名SecondViewController并在其中设置以下代码:
SecondViewController
import UIKit class SecondViewController: UIViewController { var text: String? @IBOutlet weak var label: UILabel! // FIXME: link this to the UILabel in the Storyboard!!! override func viewDidLoad() { super.viewDidLoad() label.text = text } }
在情节提要中,将第一个视图控制器嵌入到中UINavigationController。使用UIButton或将第一个视图控制器链接到第二个UIBarButtonItem。将第一个视图控制器FirstViewController的名称设置为,将第二个视图控制器的名称设置为SecondViewController。UITextField在第一个视图控制器中创建一个。UILabel在第二个视图控制器中创建一个。链接文本框,并在标签各自的声明FirstViewController和SecondViewController。
UINavigationController
UIButton
UIBarButtonItem
UITextField
UILabel
在这里,这是一个完美的协议/代理案例。您可能会在StackOverflow上找到很多与此相关的东西。但是,这是一个粗糙的示例。
import UIKit class FirstViewController: UIViewController, DetailsDelegate { @IBOutlet weak var label: UILabel! // FIXME: link this to the UILabel in the Storyboard func updateLabel(withString string: String?) { label.text = string } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { let controller = segue.destinationViewController as! SecondViewController controller.delegate = self } }
在您的项目中添加一个新的Cocoa / Cocoa Touch类文件,为其命名SecondViewController并在其中设置以下代码:
import UIKit protocol DetailsDelegate: class { func updateLabel(withString string: String?) } class SecondViewController: UIViewController { weak var delegate: DetailsDelegate? @IBOutlet weak var textField: UITextField! // FIXME: link this to the UITextField in the Storyboard override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(animated) delegate?.updateLabel(withString: textField.text) } }
在情节提要中,将第一个视图控制器嵌入到中UINavigationController。使用UIButton或将第一个视图控制器链接到第二个UIBarButtonItem。将第一个视图控制器FirstViewController的名称设置为,将第二个视图控制器的名称设置为SecondViewController。UILabel在第一个视图控制器中创建一个。UITextField在第二个视图控制器中创建一个。链接文本框,并在标签各自的声明FirstViewController和SecondViewController。