Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.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
Ios 获取容器视图的父视图控制器_Ios_Swift_Swift3_Uicontainerview - Fatal编程技术网

Ios 获取容器视图的父视图控制器

Ios 获取容器视图的父视图控制器,ios,swift,swift3,uicontainerview,Ios,Swift,Swift3,Uicontainerview,我有一个名为MainVC的UIViewController,其中包含一个名为TableVC的UITableViewController,它使用一个容器,我正试图通过在其内部使用以下代码来获取TableVC的父视图控制器:让parentVC=self.parent as!MainVC,但我得到一个致命错误:在展开可选值时意外发现nil。然后我再次检查self.parent是否为零,正如预期的那样,它是零。之后,我在MainVC中使用以下代码:self.childViewControllers[0]

我有一个名为MainVC的UIViewController,其中包含一个名为TableVC的UITableViewController,它使用一个容器,我正试图通过在其内部使用以下代码来获取TableVC的父视图控制器:让parentVC=self.parent as!MainVC,但我得到一个致命错误:在展开可选值时意外发现nil。然后我再次检查self.parent是否为零,正如预期的那样,它是零。之后,我在MainVC中使用以下代码:self.childViewControllers[0]as!TableVC确保TableVC是MainVC的子视图,并且代码工作正常。因此,我的问题是,如何获取容器视图的父视图?

我不知道您需要MainVC引用的原因,但是如果您需要在MainVC中执行某些函数或更改某些值,您应该使用委托,您可以找到有关如何使用它的更多信息

另一个选项是在UITableViewController中创建MainVC类型的引用,并在显示UITableViewController时进行设置

.superview对任何UIView子类的访问都会为您提供父类。
如果您知道视图控制器堆栈的层次结构,.superview应该可以帮助您解决问题。

是否可能在实际添加TableVC之前尝试获取父视图控制器?您在代码的何处调用let parentVC=self.parent as!MainVC?@DonMag它在func中ViewDidLoad@DonMag我刚刚把它移到func VIEW WILLEXEEN中,它成功了!非常感谢!您是通过故事板还是以编程方式配置这两个控制器的?好的-可能发生了什么:ViewDidLoad在加载TableVC时运行。。。在这一点上,它实际上不是任何事物的孩子。。。因此,您无法获取其父级。尝试将let parentVC=self.parent放入ViewDidDisplay。。。编辑:哎呀,你的评论让我措手不及:我之所以需要引用MainVC,是因为我有一个手势识别器来检测敲击手势,以便在触摸键盘外部时关闭键盘。它需要两个目标,一个是TableView本身,另一个是MainVCViewController没有SuperView