ios - 从 ContainerView 委托(delegate)给父 ViewController

标签 ios swift delegation

我有以下设置:

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/

相关文章:

javascript - 我可以通过将所有相同类型的事件组合到一个处理程序中来提高 jQuery 性能吗?

objective-c - iPhone - 时区便利方法之间的差异

ios - 在核心图中建议此问题的图表类型

ios - 为什么远程命令中心不显示在模拟器中?

swift - Perfect-Swift如何读写图片到web根目录?

java - 装饰器模式和委托(delegate)模式的区别

c++ - 您使用什么模式来分离 C++ 中的接口(interface)和实现?

ios - IOS (iPad 2) 上 AIR 3.9 中的 StageWebView

ios - 如何删除 UITableView 部分标题删除后创建的空间?

ios - 未显示 UIWebView