2017-08-09 66 views
1

我有ChildViewController,它继承自ParentViewController,如下所示:class ChildViewController: ParentViewController。在ParentViewController我试图执行下面的代码片段:Swift 3:获取子视图控制器的上下文

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

我猜想它不工作,因为它是ParentViewController孩子是实际的屏幕上可见。是否有可能让他的背景(自我)的ChildViewController为了使片段工作?

谢谢你的帮助。

+2

请详细说明,编辑您的问题。 anotherViewController和ChildViewController/ParentViewController之间的关联是什么? “我假设它不工作......”什么?!你当前的结果是什么?你期望的结果是什么? “是否有可能让他的背景(自我)”得到它在哪里? “自我”只是一个当前实例... –

+0

@MaticOblak我试图从ParentViewController呈现一个新的视图控制器,但是当我尝试时该应用程序崩溃。 ParentViewController是ChildViewController继承的,AnotherViewController只是另一个视图控制器,我试图显示。 – samson

+0

那么崩溃是什么?一个从另一个继承的视图控制器不会产生崩溃,即使父母正在呈现一个孩子,反之亦然,父母提出父母或孩子表现孩子。您可以堆叠/创建任意数量的相同视图控制器的实例,并根据需要使用它们。 –

回答

0

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

如果您有2个班级,如您所说ParentViewControllerChildViewController其中ChildViewControllerParentViewController的子类。你有一个ParentViewController的方法,你假设没有ChildViewController的访问/上下文,虽然实例本身是一个ChildViewController ......你在这里的假设是错误的!

ChildViewController将继承所有的从其超ParentViewController的方法和所有这些方法都具有自参考ChildViewController,而不是ParentViewController。这意味着,如果您有方法A和方法B,则覆盖子视图控制器中的方法B。当父视图控制器在方法A中调用方法B时,将调用重写的方法。这意味着虽然在父视图控制器中调用方法A,但方法B将在子视图控制器上调用。因此,从来没有得到一个“孩子”的背景的问题。问题可能在于你可能无法获得作为父母的自我背景。但是,这是通过设计创造的,它完全是应该的。

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

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

相关问题