【问题标题】:How do I get the views inside a container in Swift?如何在 Swift 中获取容器内的视图?
【发布时间】:2015-06-17 09:33:48
【问题描述】:

我有一个容器视图,我弹出到我的情节提要中。有一个很棒的小箭头,代表嵌入到另一个场景的转场。该场景的顶级对象由自定义UIViewController 控制。我想调用在我的自定义类中实现的方法。如果我可以访问容器,我如何获得对里面内容的引用?

【问题讨论】:

    标签: ios swift uicontainerview


    【解决方案1】:

    您可以使用prepareForSegueUIViewController 中的一个方法)来访问从当前视图控制器中被转接的任何UIViewController,这包括embed 转接。

    来自关于prepareForSegue的文档:

    这个方法的默认实现什么都不做。当您的视图控制器需要将相关数据传递给新的视图控制器时,它会覆盖此方法。 segue 对象描述了转换,并包括对 segue 中涉及的两个视图控制器的引用。

    在您提到需要在自定义视图控制器上调用方法的问题中。以下是您如何做到这一点的示例:

    1. 为您的嵌入 segue 提供一个标识符。您可以在 Interface Builder 中执行此操作,方法是选择您的 segue,转到 Attributes Editor 并查看 Storyboard Embed Segue

    2. 创建您的类,例如:

    保留对embeddedViewController 的引用,因此以后可以调用myMethod。它被声明为隐式展开的可选项,因为给它一个非零初始值是没有意义的。

    //  This is your custom view controller contained in `MainViewController`.
    class CustomViewController: UIViewController {
        func myMethod() {}
    }
    
    class MainViewController: UIViewController {
        private var embeddedViewController: CustomViewController!
    
        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if let vc = segue.destination as? CustomViewController,
                        segue.identifier == "EmbedSegue" {
                self.embeddedViewController = vc
            }
        }
    
        //  Now in other methods you can reference `embeddedViewController`.
        //  For example:
        override func viewDidAppear(animated: Bool) {
            self.embeddedViewController.myMethod()
        }
    }
    

    3.使用Identity Inspector在IB中设置UIViewControllers的类。例如:

    现在一切都应该正常了。希望对您有所帮助!

    【讨论】:

    • prepareForSegue 是不是被其他东西覆盖的函数?
    • 这很好用,但是我注意到我不需要 where segue.identifier == "EmbedSegue" 位,如果您有多个嵌入式控制器,您可能需要它,但只有一个,看起来您不需要不需要标识符。
    【解决方案2】:

    ABaker 的回答为父母提供了一个了解孩子的好方法。要让子代码中的代码到达父节点,请使用 self.parent(或在 ObjC 中,parentViewController)。

    【讨论】:

      猜你喜欢
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      相关资源
      最近更新 更多