我有两个视图,一个是主视图,另一个是容器视图。我想做的是向孩子发送一个变量并让它执行我的功能。如何从父视图告诉子视图这两件事?
我遇到的一些问题是, ViewDidLoad 在容器视图中不起作用。当我试图对信息进行分割时,它还说已经实现了一个 periotical 编程或容器,向我表明容器不能被分割。
我要做的是有两个表,第一个表有一个列表,第二个表会根据您在第一个表中选择的内容而变化。所以我决定使用一个大部分工作的容器视图来分隔这两个表。
我有两个视图,一个是主视图,另一个是容器视图。我想做的是向孩子发送一个变量并让它执行我的功能。如何从父视图告诉子视图这两件事?
我遇到的一些问题是, ViewDidLoad 在容器视图中不起作用。当我试图对信息进行分割时,它还说已经实现了一个 periotical 编程或容器,向我表明容器不能被分割。
我要做的是有两个表,第一个表有一个列表,第二个表会根据您在第一个表中选择的内容而变化。所以我决定使用一个大部分工作的容器视图来分隔这两个表。
首先,您应该注意,您创建的任何容器都可以通过childViewControllers
主控制器上的属性获得。这为您提供了主控制器和子控制器之间的链接。
现在您要做的是在父表发生更改时更改子表中的某些内容。有很多方法可以做到这一点,但在这种情况下,有一个非常简单的技术:您总是知道父表格单元格选择何时更改,在didSelectRowAtIndexPath
. 因此,您需要做的只是在 内didSelectRowAtIndexPath
,当行更改时,您调用子控制器中的一个方法,该方法传入有关您要使用的当前选定行的任何信息。该方法将更改表格并在子视图中执行您想做的任何其他事情,因为它是子控制器的一部分。
使用委托或 KVO 或任何其他技术都是矫枉过正的,并且必然会使代码的可读性大大降低。
您可以使用委托来执行此操作。委托只是您可以实现以将数据传递到另一个视图的协议:
protocol nameOfProtocol {
func someFunc
}
您可以轻松地搜索教程或示例,这样您就可以更好地对其进行可视化,而不仅仅是在这里查看一些代码。
如果你想viewDidLoad
工作,你可以在故事板中创建一个视图,给它一个标识符名称(并将其设置为正确的视图控制器),你可以像这样声明它:
let viewController = storyboard?.instantiateViewControllerWithIdentifier("viewControllerName") as! ViewControllerName