我有一个应用程序在堆栈上推送四个viewcontrollers。在第四个视图控制器中,我做了一个PopViewController,所以我应该回到第三个viewcontroller,在viewWillAppear方法中,我做一个PopToRootViewController。这不会让我回到正确的第一个viewcontroller。代码很简单,只是一个
[self.navigationController pushViewController:nextController animated:YES]
在前3个视图控制器中的每一个中,以及在第4个
中[self.navigationController popViewControllerAnimated:YES].
在第3个viewcontroller中,我有一个viewWillAppear方法:
[self.navigationController popToRootViewControllerAnimated:YES].
当我查看视图时,我得到以下内容:
启动应用:
Back: Title: FirstLevel
按OK:
Back: FirstLevel Title: SecondLevel
按OK:
Back: SecondLevel Title: ThirdLevel
按OK:
Back: ThirdLevel Title: FourthLevel
按OK:弹出1,然后弹回root:
Back: FirstLevel Title: ThirdLevel
如果我现在按OK:
Back: ThirdLevel Title: SecondLevel
如果这令人困惑,我很抱歉。我应该能够弹回一个视图控制器,然后立即弹回到根目录吗?
感谢您的帮助。
答案 0 :(得分:9)
根据Mark的建议,您应该使用4rth视图控制器中的-popToRootViewController
,而不是第3个视图控制器,因为您的动机是将其弹出到根视图控制器。
但是如果您仍然想要出于某种匿名原因而实现此功能,那么在第3个viewcontroller中,请使用:
[self.navigationController popToRootViewControllerAnimated:YES]
方法中的 viewDidAppear
,而不是viewWillAppear
。
我希望它有效:)
答案 1 :(得分:1)
似乎没有任何理由回弹查看控制器3,因为您甚至在视图控制器3的视图出现之前尝试转到根目录。只需发送-popToRootViewControllerAnimated:
即可查看控制器4.