【发布时间】:2019-05-02 08:00:06
【问题描述】:
我有带有 mainView 和 ChildView 的 UIViewController。 我想从 ChildView 更改 mainView 中的标签
我添加的孩子
let to = ChildView()
self.addChild(to)
self.mainView.addSubview(to.view)
self.mainViewConstraint.constant = to.view.frame.height
to.view.frame = self.mainView.bounds
to.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
mainView - 它的视图,显示 childView
我正在尝试通过委托来执行此操作 在子视图中:
protocol UserDelegate {
func changeName(name: String)
}
class ChildView: UIViewController {
var userDelegate: UserDelegate?
@IBAction func changeNameBtn(_ sender: UIButton) {
self.userDelegate?.changeName(name: "TestChanges")
}
}
在主视图中:
class MainView: UIViewController, UserDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let ChildView = ChildView()
ChildView.userDelegate = self
}
func changeName(name: String) {
self.helloLabel.text = "Hello \(name)!"
}
}
【问题讨论】:
-
加断点检查了吗?你的 changename 函数是否触发?
-
@ShauketSheikh,是的,我已检查 - 未触发
-
表示委托有问题。你为什么要加这个? self.addChild(to) 之后您将添加到主视图中。在该子视图有两个父视图之后。
-
顺便说一句,你的问题在这里 let ChildView = ChildView() 你的委托与这个对象绑定,你应该被称为其他对象委托
-
@ShauketSheikh 谢谢!!
标签: swift uiviewcontroller delegates childviewcontroller