Swift 3:获取子视图控制器的上下文

时间:2017-08-09 09:30:20

标签: ios swift segue

ChildViewController继承了ParentViewController这样的人:class ChildViewController: ParentViewController。在ParentViewController我正在尝试执行以下代码段:

let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "anotherViewController") 
self.present(controller, animated: true, completion: nil)

我认为它不起作用,因为它是ParentViewController孩子在实际屏幕上可见。是否有可能获得ChildViewController的上下文(自我)以使代码段有效?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果我现在理解你的问题(并且那里有一个很大的IF),你就无法理解继承和你的上下文"。

如果您说ParentViewControllerChildViewController,那么ChildViewControllerParentViewController的子类。您在ParentViewController中有一个方法,您认为该方法没有ChildViewController的访问权/上下文,尽管实例本身是ChildViewController ...您的假设是错误的!

您的ChildViewController将继承其超类ParentViewController中的所有方法,并且所有这些方法都会自我引用ChildViewController而不是ParentViewController。这意味着如果您有方法A和方法B,则在子视图控制器中覆盖方法B。当父视图控制器调用方法B中的方法A时,将调用重写的方法。这意味着虽然在父视图控制器中调用方法A,但是将在子视图控制器上调用方法B。因此,从来没有一个问题是获得一个孩子的背景"。问题可能是您可能无法将自我的上下文作为父级。但这是通过设计创建的,它应该是应该的。

所以我想回答你的问题;是的,这是可能的,实际上已经发生在你身上了。如果在父视图控制器的方法中放置一个断点并打印self(在控制台类型" po self"中),您应该看到该类型实际上是子视图控制器。

您面临的问题很可能是其他问题的结果。请添加异常断点以查看崩溃发生的位置,并在控制台中查看日志以查看其中的内容。