访问容器视图子属性 swift

Access container view child properties swift

我想达到的目标:

用户按下 ViewController 中的按钮,放置在容器视图中的按钮的颜色应更改为红色。

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

一步一步:

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

示例:

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

我建议不要依赖 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
    }
}

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

Swift macOS 3:

// MARK: - Container View Controller

var containerViewController: ContainerViewController?

let containerSegueIdentifier = "Container Segue"

override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
    if segue.identifier == containerSegueIdentifier {
        if let connectContainerViewController = segue.destinationController as? FormationViewController {
            formationViewController = connectContainerViewController
        }
    }
}

检查标识符和控制器class。

Swift4,Xcode9.4.1

var contentViewController : UIContentViewController?

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == containerSegueName {
       contentViewController = segue.destination as? UIContentViewController
    }
}