Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何正确访问子视图控制器_Swift - Fatal编程技术网

Swift 如何正确访问子视图控制器

Swift 如何正确访问子视图控制器,swift,Swift,我的主视图控制器上的容器视图中有一个UIViewController。我正在尝试取消隐藏子视图控制器并在子视图上执行一个函数,但我不知道如何正确访问它 我试过这个: let ChildVC = children.first as! ChildView ChildVC.RunFunction() 但这不起作用,因为我有多个子视图 let ChildVC = storyboard?.instantiateViewController(withIdentifier: "Child") as! Ch

我的主视图控制器上的容器视图中有一个UIViewController。我正在尝试取消隐藏子视图控制器并在子视图上执行一个函数,但我不知道如何正确访问它

我试过这个:

let ChildVC = children.first as! ChildView
ChildVC.RunFunction()
但这不起作用,因为我有多个子视图

 let ChildVC = storyboard?.instantiateViewController(withIdentifier: "Child") as! ChildView
 ChildVC.RunFunction()
然后我尝试了这个,但是当RunFunction()函数被执行时,它抛出了很多错误,说里面的东西是零。(错误不在run函数中,因为它在通过children.first方法访问时工作正常)

如何在不使用childViewController[1](或childViewController是什么数字)方法的情况下指定确切的childViewController

任何帮助都将不胜感激

既然您提到了“容器视图”,我假设您使用嵌入序列调用子视图控制器

假设是这样,您应该实现一个
prepare(for:sender)
方法来保存指向子对象的指针:

为父视图控制器提供一个实例变量:

var childView: ChildView?
然后在
prepare(for:sender)
方法中

func prepare(for segue: NSStoryboardSegue, sender: Any?) {
   if let dest = segue.destination as? ChildView {
       childView = dest
   }
}
然后,当您需要向childView发送消息时:

childView?.runFunction()

(方法名称应以小写字母开头)

最简单的方法是在实例化所需的视图控制器时获取该控制器的引用,并将其添加到容器中。你是怎么做到的?你在用故事板吗?非常感谢。尽管我更喜欢不必依赖基本上是外部类的东西,这样我就可以在一个块中完全运行函数。但我想这可能是容器视图的局限性。