访问容器视图子属性swift

时间:2015-11-22 16:32:40

标签: xcode swift properties containers uicontainerview

我想要实现的目标:

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

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

enter image description here

4 个答案:

答案 0 :(得分:42)

一步一步:

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

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

答案 1 :(得分:16)

我建议不要依赖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名称出错。

答案 2 :(得分:2)

Swift 4,Xcode 9.4.1

var contentViewController : UIContentViewController?

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

答案 3 :(得分:1)

swift 3 for macOS:

// 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
        }
    }
}

检查标识符和控制器类。