从ContainerView委派给父ViewController

时间:2016-06-30 20:45:22

标签: ios swift delegation

我有以下设置:

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

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

我应该向View Controller添加哪些代码才能使其正常工作?

谢谢,

1 个答案:

答案 0 :(得分:4)

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