从 ContainerView 委托给父级 ViewController

Delegation from ContainerView to parent ViewController

我有以下设置:

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 中做的 ContainerViewController

let destination = segue.destinationViewController as! ContainerViewController
destination.delegate = self

但在这种情况下,两个视图控制器始终存在。

我应该向视图控制器添加什么代码才能使其工作?

谢谢,

如果其中一个视图控制器位于容器视图内,则它会加载一个嵌入的转场,该转场会在包含的视图控制器首次加载时触发。 prepareForSegue 方法仍会被调用,因此您可以完全按照您所描述的那样设置委托。我一直认为嵌入 segues 有点奇怪(这不是真正的 segue,更像是加载子视图控制器)但这就是它的工作原理。