我有以下设置:
StartViewController有一个包含ContainerViewController的ContainerView
在ContainerViewController中执行任务后,我尝试找到一种在StartViewController中隐藏元素的方法。
为此我尝试使用这样的委托方法:
StartViewController
class StartViewController: UIViewController, showBannerAdDelegate {
@IBOutlet weak var bannerView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
bannerView.hidden = false
}
func bannerAdHidden(status: Bool) {
bannerView.hidden = status
}
}
ContainerViewController
protocol showBannerAdDelegate: class {
func bannerAdHidden(status: Bool)
}
class ContainerViewController: UIViewController {
weak var delegate: showBannerAdDelegate! = nil
@IBAction func buttonPressed(sender: UIButton) {
delegate.bannerAdHidden(true)
}
}
如果我在prepareForSegue
中提供了ContainerViewControllerlet destination = segue.destinationViewController as! ContainerViewController
destination.delegate = self
但在这种情况下,两个视图控制器始终存在。
我应该向View Controller添加哪些代码才能使其正常工作?
谢谢,
答案 0 :(得分:4)
如果其中一个视图控制器位于容器视图中,则会加载一个嵌入segue,当首次加载包含视图控制器时会触发该嵌入segue。 prepareForSegue
方法仍然被调用,因此您可以完全按照您的描述设置委托。我一直认为嵌入segues有点奇怪(它不是真正的segue,更像是加载子视图控制器),但这就是它的工作原理。