2015-06-24 47 views
2

说我有一个堆栈3视图控制器深。如果我在navigationController上拨打popToRootViewController,则顶部视图控制器将调用viewWillDisappear,但不在中间控制器上。中间控制器上是否有所谓的?当popToRootViewController被调用时会发生什么?

更新:我尝试使用dealloc来满足我需要的东西,但发现VC从root + 1释放到顶端,而不是您认为堆栈可行的方式。

+1

中间控制器在弹出到根目录时永远不会出现,并且当它永远不会出现时它不会消失,所以您不会期望这些方法被调用。在弹出它之后,它可能会调用它的'dealloc'方法。 – dan

+0

第二个视图控制器的'viewWillDisappear'被假定在第三个出现/被按下之前调用。同样,如果您一次推入多个视图控制器,可以预期“中间”控制器不会调用“viewWillAppear”或“viewWillDisappear”,直到导航堆栈适当更改。 –

+0

是的,我得到'viewWillDisappear'不会被调用,因为nav直接从顶部到根部弹出,但我认为它会通知视图控制器他们即将从堆栈弹出。 – doman412

回答

1

当您致电popToRootViewController时,当前可见的viewController消失(在调用viewWillDisappear后)和第一个控制器显示在堆栈上。
之间的所有viewControllers都被释放(在呼叫dealloc之后)而未被显示。如果他们没有显示,他们不能消失。

TL; DR:使用dealloc方法来处理任何你也有。 (并且确保不要在任何地方保留对这些方法的强烈引用)

+1

我试图使用'dealloc',但是它并没有在堆栈的自上而下顺序中调用,所以我无法使用它。相反,我将'UINavigationController'分类为'UINavigationController',因为我已经有了一个自定义导航栏,并且按照相反的顺序覆盖了'popToRootViewController'来调用super所返回数组中VC的协议方法。它解决了 – doman412

相关问题