父视图中的Swift Container控件

时间:2015-04-10 17:46:13

标签: ios xcode swift childviews

我有两个视图,一个是主视图,另一个是容器视图。我想做的是将一个变量发送给孩子并让它执行我的功能。如何告诉孩子从父视图中查看这两件事?

我遇到的一些问题是,ViewDidLoad在容器视图中不起作用。当我试图提供信息时,它还说已经实施了一个periotical编程或容器,告诉我容器不能被塞住。

我要做的是有两个表,第一个表有一个列表,第二个表根据你在第一个表中选择的内容而改变。所以我决定使用容器视图分离这两个表,这个视图大部分都在工作。

2 个答案:

答案 0 :(得分:1)

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

现在你要做的是如果父表的变化,就改变孩子表中的某些东西。有很多方法可以做到这一点,但在这种情况下,有一种非常简单的技术:你总是知道父类的表格单元格选择在didSelectRowAtIndexPath中何时发生变化。因此,您需要做的只是在didSelectRowAtIndexPath内,当行更改时,您调用子控制器中的方法,该方法传递有关您要使用的当前所选行的任何信息。该方法将更改表并在子视图中执行您想要执行的任何操作,因为它是子控制器的一部分。

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

答案 1 :(得分:0)

您可以使用委托来执行此操作。代理只是您可以实现的将数据传递到另一个视图的协议:

protocol nameOfProtocol {
    func someFunc
}

您可以轻松搜索教程或示例,这样您可以更好地直观地看到它,而不仅仅是在这里查看一些代码。

如果您希望viewDidLoad工作,您可以在故事板中创建一个视图,为其指定一个标识符名称(并将其设置为正确的视图控制器),您可以将其声明为:

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