Ios 在swift中的视图之间传递数据
我试图熟悉swift,但我找不到如何使用swift在视图之间传递数据Ios 在swift中的视图之间传递数据,ios,swift,Ios,Swift,我试图熟悉swift,但我找不到如何使用swift在视图之间传递数据 class ViewController: UIViewController { @IBOutlet var field: UITextField @IBOutlet var butt: UIButton override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { if let vc = segue.destinati
class ViewController: UIViewController {
@IBOutlet var field: UITextField
@IBOutlet var butt: UIButton
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if let vc = segue.destinationViewController as? secondViewController {
if(vc.lab != nil){
vc.lab.text=self.field.text
println(self.field.text)
}
}
和第二视图控制器:
class secondViewController: UIViewController {
@IBOutlet var lab: UILabel
override func viewDidLoad() {
super.viewDidLoad()
}
我想做的只是用第一个视图的textfield的文本更改第二个视图中的标签。
这样做不会给我任何错误,但我不会更改标签。对我来说,这看起来不是一个快速的问题。这看起来像是视图生命周期问题。调用
prepareforsgue:
时,secondViewController
尚未从情节提要加载它的IBOutlets
。更好的解决方案是在文件上设置某种类型的属性,如
vc.myLabelString = self.field.text
然后在secondViewController
的viewdiload
中将文本分配给标签
仅供参考:您可以随时检查视图控制器是否已使用
vc.isViewLoaded()
加载其视图这是我不喜欢情节提要的原因之一。它隐藏了实际发生的事情。在代码中执行所有操作时,很明显当时没有加载标签。@dasdom我同意您的说法,它有点模糊,但在我看来,首先处理另一个VC的视图并不是演示视图控制器的责任。理想情况下,VC 1会将一些模型对象传递给VC 2。加载后,VC 2将知道使用StatePark模型中包含的各种数据填充其所有视图,如名称、位置、图像、描述、土著动物等。我完全同意。还是不喜欢故事板。:)