通过子视图控制器实现中的以下代码,可以删除子视图控制器:
- (void)commandFinishVC
{
[ self.view removeFromSuperview];
[ self removeFromParentViewController ];
}
子视图控制器及其视图已成功移除,但父级如何被通知呢?-viewDidDisappear未被调用,而-viewDidUnload已被弃用。
从我所找到的例子来看,总是假定父视图控制器是提名要删除子视图的事件的发起者,但(对我来说)子视图应该在其完成逻辑上是自主的。
应该通过利用self.parentViewController属性调用删除方法,并在父视图控制器中使用类似以下的内容吗?
- (void)commandFinishVC
{
[ childVC.view removeFromSuperview];
[ childVC removeFromParentViewController ];
}
transitionFromViewController
的animation
块属于同一类别,被记录为“必需”,但在实践中通常不需要。)所以,简而言之,是的,你说得对,文档说我们必须调用这些方法,但在实践中是否如此并不清楚。就个人而言,如果文档说我们必须做某事(尤其是像单个方法调用这样简单的事情),我通常会按照良好、防御性编程的精神去做。 - RobwillMoveToParentViewController
什么都不做的参考资料,但在 WWDC 2011 会议上,他们甚至说如果你实现自己的willMoveToParentViewController
,那么你当然会调用super
实现。你很可能是对的,即默认情况下什么也不做,但是由于我们“必须”调用它,并且如果我们有自己的实现,应该调用super
方法的语言,我倾向于调用它。这只是一个调用,所以我认为几乎没有什么缺点。 - Rob