如何通过segue将数据从容器视图控制器传递到其他控制器?

时间:2018-08-15 04:22:41

标签: swift segue pass-data container-view

enter image description here

我想通过在容器视图控制器中输入文本来更新最右边控制器中的标签(然后单击按钮提交文本),但是标签没有更新。我不确定代码的哪一部分是错误的。并且,有什么好的解决方案可以在容器与其父容器之间共享数据?谢谢。

以下代码:

import UIKit

class ChildViewController: UIViewController {

    override func viewDidLoad() {
    super.viewDidLoad()

}


@IBOutlet weak var TextField: UITextField!


@IBAction func PassItToUpdate(_ sender: UIButton) {
    let parentController = self.parent as! MainViewController
    parentController.performSegue(withIdentifier: "PassToUpdate", sender: parentController)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "PassToUpdate" {
        let vc = segue.destination as! UpdateViewController
        vc.UpdateTextLabel.text = TextField.text
    }
}

}



import UIKit

class MainViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

    }

}


import UIKit

class UpdateViewController: UIViewController {
override func viewDidLoad() {
    super.viewDidLoad()

}

@IBOutlet weak var UpdateTextLabel: UILabel!


}

1 个答案:

答案 0 :(得分:0)

供以后参考,it doesn't work通常不足以为我们提供帮助,您应该提及是否遇到错误(哪一个),崩溃(控制台怎么说),什么都没发生等

我将继续猜测您的应用程序崩溃,因为您正在视图前访问UpdateTextLabel,因此尚未创建文本字段。

对您的prepareForSegue函数进行此更改:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "PassToUpdate" {
        let vc = segue.destination as! UpdateViewController
        vc.loadViewIfNeeded()
        vc.UpdateTextLabel.text = TextField.text
    }
}

这将在尝试访问文本字段之前加载视图和文本字段。

还有一件事,通常的做法是,类名以大写字母开头(例如MyViewController),变量以小写字母开头(updateTextLabel而不是UpdateTextLabel)。