从 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,更像是加载子视图控制器)但这就是它的工作原理。
我有以下设置:
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,更像是加载子视图控制器)但这就是它的工作原理。