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