Swift 来自 parent 视图的容器控件

Swift Container control from parent view

我有两个视图,一个是主视图,一个是容器视图。我想做的是将一个变量发送到 child 并让它执行我的函数。我如何从 parent 视图告诉 child 视图这两件事?

我遇到的一些问题是,ViewDidLoad 在容器视图中不起作用。当我试图搜索信息时,它还说已经实现了一个周期性编程或容器,这表明容器无法被搜索。

我想做的是有两个 table,第一个 table 有一个列表,第二个 table 根据您 select 在第一个table。所以我决定使用一个容器视图将两个 table 分开,这在大多数情况下都有效。

您可以使用委托来做到这一点。委托只是您可以实现以将数据传递到另一个视图的协议:

protocol nameOfProtocol {
    func someFunc
}

您可以轻松地搜索教程或示例,这样您就可以更好地形象化它,而不是只看这里的一些代码。

如果你想让 viewDidLoad 工作,你可以在故事板中创建一个视图,给它一个标识符名称(并将它设置为正确的视图控制器),你可以像这样声明它:

let viewController = storyboard?.instantiateViewControllerWithIdentifier("viewControllerName") as! ViewControllerName

首先,您应该注意,您创建的任何容器都可以通过主控制器上的 childViewControllers 属性 使用。这为您提供了主控制器和 child 控制器之间的 link。

现在您要做的是在 parent 的 table 发生变化时更改 child 的 table 中的内容。有很多方法可以做到这一点,但在本例中有一个非常简单的技术:您总是知道 parent 的 table 单元格选择何时发生变化,在 didSelectRowAtIndexPath 中。因此,您需要做的只是在 didSelectRowAtIndexPath 内,当行更改时,您调用 child 控制器中的一个方法,该方法传递有关您要使用的当前选定行的任何信息。该方法将更改 table 并在 child 视图中执行您想执行的任何其他操作,因为它是 child 控制器的一部分。

使用委托或 KVO 或任何其他技术是矫枉过正,必然会降低代码的可读性。