我有以下设置:
StartViewController 有一个包含 ContainerViewController 的 ContainerView
我试图找到一种方法,在 ContainerViewController 中执行任务后隐藏 StartViewController 中的元素。
为此,我尝试使用这样的委托(delegate)方法:
启动 View Controller
class StartViewController: UIViewController, showBannerAdDelegate {
@IBOutlet weak var bannerView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
bannerView.hidden = false
}
func bannerAdHidden(status: Bool) {
bannerView.hidden = status
}
}
容器 View Controller
protocol showBannerAdDelegate: class {
func bannerAdHidden(status: Bool)
}
class ContainerViewController: UIViewController {
weak var delegate: showBannerAdDelegate! = nil
@IBAction func buttonPressed(sender: UIButton) {
delegate.bannerAdHidden(true)
}
}
如果我展示 ContainerViewController 我可以在 prepareForSegue 中做
let destination = segue.destinationViewController as! ContainerViewController
destination.delegate = self
但在这种情况下,两个 View Controller 始终存在。
我应该向 View Controller 添加什么代码才能使其工作?
谢谢,
最佳答案
如果其中一个 View Controller 在容器 View 内,则它会加载一个嵌入的转场,当包含的 View Controller 首次加载时会触发该转场。 prepareForSegue
方法仍会被调用,因此您可以完全按照您所描述的那样设置委托(delegate)。我一直认为嵌入 segues 有点奇怪(它不是真正的 segues,更像是加载 subview Controller )但它就是这样工作的。
关于ios - 从 ContainerView 委托(delegate)给父 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38132938/