【问题标题】:Get container view's parent viewcontroller获取容器视图的父视图控制器
【发布时间】:2017-07-03 04:28:35
【问题描述】:

我有一个名为 MainVC 的 UIViewController 通过使用容器包含一个名为 TableVC 的 UITableViewController,我正在尝试通过在其自身内部使用以下代码来获取 TableVC 的父视图控制器:@987654324 @,但我得到fatal error: unexpectedly found nil while unwrapping an Optional value。然后我仔细检查了self.parent 是否如预期的那样为零。之后,我在MainVC:self.childViewControllers[0] as! TableVC 中使用以下代码来确保TableVCMainVC 的子视图,并且代码工作正常。那么,我的问题是,如何获取容器视图的父视图?

【问题讨论】:

  • 您是否有可能尝试在 TableVC 实际添加到父视图控制器之前 获取父视图控制器?您在代码中的哪个位置调用 let parentVC = self.parent as!主VC?
  • @DonMag 在函数 ViewDidLoad() 中
  • @DonMag 我刚刚将它移到了 func ViewWillAppear() 中,它起作用了!非常感谢!
  • 您是通过情节提要还是编程方式配置了这两个控制器?
  • OK - 可能发生了什么:ViewDidLoad() 在您的 TableVC 加载时运行......在那时,它实际上不是任何东西的孩子......所以你不能得到它的父母。尝试将let parentVC = self.parent 放入 viewDidAppear()... 编辑:哎呀,你的评论打败了我 :)

标签: ios swift swift3 uicontainerview


【解决方案1】:

我不知道是什么原因需要 MainVC 的引用,但是如果你需要在 MainVC 中执行一些函数或改变一些值你应该使用 Delegates,你可以找到更多关于如何使用它的信息@987654321 @

其他选项是您在 MainVC 类型的 UITableViewController 中创建一个引用,并在您呈现 UITableViewController 时设置它

【讨论】:

  • 我需要参考 MainVC 的原因是我有一个手势识别器来检测点击手势,以便在触摸键盘外部时关闭键盘。它需要两个目标,一个是 TableView 本身,另一个是 MainVC
【解决方案2】:

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

【讨论】:

  • ViewControllers 没有超级视图
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-27
  • 2012-10-26
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多