在Swift中在视图之间传递数据

4
我正在尝试熟悉Swift,但我找不到如何使用Swift在视图之间传递数据的方法。
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()

}

我想要做的是简单地用第一个视图的文本字段的文本更改第二个视图中的标签。 这种方法不会给我任何错误,但我没有更改标签。
1个回答

2

对我来说,这不像是一个Swift问题。看起来更像是视图生命周期的问题。当调用 prepareForSegue:时,secondViewController尚未从storyboard加载其IBOutlets 。更好的解决方案是在文件上设置某种属性,例如

vc.myLabelString = self.field.text

secondViewControllerviewDidLoad中将文本分配给标签。
FYI:您可以始终检查视图控制器是否已使用vc.isViewLoaded()加载其视图。

这就是我不喜欢Storyboard的原因之一。它隐藏了实际发生的事情。如果全部在代码中完成,那么很明显标签在那个时候没有被加载。 - dasdom
@dasdom 我同意你的看法,这段代码有点难懂,但我认为呈现视图控制器本身不应该处理另一个视图控制器的视图。理想情况下,VC1将一些模型对象传递给VC2。称之为“StatePark”。加载时,VC2将知道使用StatePark模型中包含的各种数据填充其所有视图,例如名称、位置、图像、描述、土著动物等。 - dalton_c
我完全同意。但仍然不喜欢故事板。 :) - dasdom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接