访问容器视图子属性swift

Tom*_*adi 21 xcode containers properties uicontainerview swift

我想要实现的目标:

用户按下ViewController中的按钮,然后放置在容器视图中的按钮颜色应该将其颜色更改为红色.

如何从ViewController访问放置在容器视图中的按钮?

在此输入图像描述

sun*_*ejr 45

一步步:

  1. 命名视图控制器和容器视图控制器之间的segue.
  2. 将属性添加到视图控制器,该控制器将包含容器视图控制器.
  3. 在视图控制器中实现一个方法prepareForSegue(_:sender:).
  4. 在方法中检查是否segue.identifier等于您在步骤1中指定的标识符.
  5. 如果为true,segue.destinationViewController则从步骤2中保存到您的属性.
  6. 现在,您已将容器视图控制器存储在属性中,以便您可以从类中进行自定义.您应该已将视图控制器存储在viewDidLoad()方法中.

例:

var containerViewController: YourContainerViewControllerClass?
let containerSegueName = "testSegue"
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == containerSegueName {
        containerViewController = segue.destinationViewController as? YourContainerViewControllerClass
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 需要使用`override func prepare(对于segue:UIStoryboardSegue,sender:Any?){`for swift 3&Xcode 8.3否则不会调用此方法 (2认同)

And*_*eev 20

我建议不要依赖segue.identifier,而是destination直接测试类型:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    super.prepare(for: segue, sender: sender)

    if let vc = segue.destination as? YourViewController {
        vc.someVariable = true
    }
}
Run Code Online (Sandbox Code Playgroud)

这样就可以避免错误拼写的segue名称.

  • 这应该是公认的答案.如果您有多个UIContainerView并尝试.identifier方法,您将失败:D感谢@andrey (2认同)