使用容器ViewController不能执行委托

时间:2019-07-14 09:56:32

标签: swift xcode containers appdelegate swift-protocols

在MainViewController中,我设置了一个按钮和一个容器视图,其中包含SecondViewController:

let secondViewController = SecondViewController()
secondViewController.willMove(toParent: self)
containerView.addSubview(secondViewController.view)
secondViewController.view.frame = containerView.bounds
secondViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.addChild(secondViewController)
secondViewController.didMove(toParent: self)

我设置了我的委托协议:

protocol SayHiDelegate {
    func sayHi()
}

MainViewController内部:

var delegate: SayHiDelegate?

@objc func buttonTapped() {
    delegate?.sayHi()
}

我在SecondViewController中设置了委托函数

func sayHi() {
    label.text = "HI"
}

在SecondViewcontroller中的viewDidLoad:

let vc = MainViewController()
vc.delegate = self

在这个项目中,我没有使用情节提要。 问题是,当我点击MainViewController中的按钮时,委托函数被调用但不起作用。 我认为问题应该在使用容器视图和委托函数。 Here下载项目。 有什么提示吗?谢谢

2 个答案:

答案 0 :(得分:1)

由于您需要从父母那里调用孩子,所以这里不需要委托,因此请在MainViewController内将其作为实例变量

let secondViewController = SecondViewController()

然后用它打电话

secondViewController.sayHi()

答案 1 :(得分:1)

将此行添加到您的代码中

self.delegate = secondViewController

检查您的委托是否为零,因为您未分配 secondViewController

的引用