我有带有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
我正在尝试与委托进行此操作 在ChildView中:
protocol UserDelegate {
func changeName(name: String)
}
class ChildView: UIViewController {
var userDelegate: UserDelegate?
@IBAction func changeNameBtn(_ sender: UIButton) {
self.userDelegate?.changeName(name: "TestChanges")
}
}
在MainView中:
class MainView: UIViewController, UserDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let ChildView = ChildView()
ChildView.userDelegate = self
}
func changeName(name: String) {
self.helloLabel.text = "Hello \(name)!"
}
}
答案 0 :(得分:1)
问题是您呈现 Dim newList As New List(Of String)
newList.AddRange(strValues.Where(Function(a) a.ToLower.StartsWith("netsh")))
newList.AddRange(strValues.Where(Function(a) a.ToLower.StartsWith("net use")))
newList.AddRange(strValues.Where(Function(a) a.ToLower.StartsWith("netsh") = False AndAlso a.ToLower.StartsWith("net use") = False))
的一个实例,并在ChildView
的另一个实例上设置了一个委托。因此,屏幕上显示的子视图与调用委托的视图不同。添加ChildView
时设置委托:
ChildView
此外,为防止保留周期,请使用对委托的let to = ChildView()
self.addChild(to)
self.mainView.addSubview(to.view)
self.mainViewConstraint.constant = to.view.frame.height
// set the delegate here
to.userDelegate = self.mainView
to.view.frame = self.mainView.bounds
to.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
引用:
weak
最后,您可以从主视图中删除protocol UserDelegate: AnyObject {
func changeName(name: String)
}
class ChildView: UIViewController {
weak var userDelegate: UserDelegate?
@IBAction func changeNameBtn(_ sender: UIButton) {
self.userDelegate?.changeName(name: "TestChanges")
}
}
实现:
viewDidLoad