我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
的上下文(自我)以使代码段有效?
感谢您的帮助。
答案 0 :(得分:0)
如果我现在理解你的问题(并且那里有一个很大的IF),你就无法理解继承和你的上下文"。
如果您说ParentViewController
和ChildViewController
,那么ChildViewController
是ParentViewController
的子类。您在ParentViewController
中有一个方法,您认为该方法没有ChildViewController
的访问权/上下文,尽管实例本身是ChildViewController
...您的假设是错误的!
您的ChildViewController
将继承其超类ParentViewController
中的所有方法,并且所有这些方法都会自我引用ChildViewController
而不是ParentViewController
。这意味着如果您有方法A
和方法B
,则在子视图控制器中覆盖方法B
。当父视图控制器调用方法B
中的方法A
时,将调用重写的方法。这意味着虽然在父视图控制器中调用方法A
,但是将在子视图控制器上调用方法B
。因此,从来没有一个问题是获得一个孩子的背景"。问题可能是您可能无法将自我的上下文作为父级。但这是通过设计创建的,它应该是应该的。
所以我想回答你的问题;是的,这是可能的,实际上已经发生在你身上了。如果在父视图控制器的方法中放置一个断点并打印self(在控制台类型" po self"中),您应该看到该类型实际上是子视图控制器。
您面临的问题很可能是其他问题的结果。请添加异常断点以查看崩溃发生的位置,并在控制台中查看日志以查看其中的内容。