0

在此处输入图像描述

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

下面的代码:

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!


}
4

1 回答 1

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)开头。

于 2018-08-15T04:29:56.263 回答