弹出视图控制器后返回根视图控制器似乎无法正常工作

9
我有一个应用程序,它将四个视图控制器推送到堆栈上。在第四个视图控制器中,我执行了PopViewController操作,所以我应该回到第三个视图控制器,在viewWillAppear方法中,我执行了PopToRootViewController操作。但是这并不能正确地将我带回第一个视图控制器。代码很简单,只是一个。
[self.navigationController pushViewController:nextController animated:YES]

在前三个视图控制器中和第四个视图控制器中。
[self.navigationController popViewControllerAnimated:YES].  

在第三个视图控制器中,我有一个viewWillAppear方法,其中执行以下操作:

[self.navigationController popToRootViewControllerAnimated:YES].

当我浏览视图时,我得到以下内容:
启动应用程序:
         Back:               Title: FirstLevel

点击“确定”:

         Back: FirstLevel    Title: SecondLevel

按下确定:

         Back: SecondLevel   Title: ThirdLevel

请按“确定”:

         Back: ThirdLevel    Title: FourthLevel

按下OK:它会弹回1,然后弹回到根目录:

         Back: FirstLevel    Title: ThirdLevel

如果我现在按下“确定”:
         Back: ThirdLevel    Title: SecondLevel

如果这让你感到困惑,我很抱歉。我应该能够弹回一个视图控制器,然后立即弹回到根视图吗?

谢谢任何帮助。

2个回答

9
如Mark所建议的那样,您应该在第四个视图控制器中使用-popToRootViewController,而不是第三个视图控制器,因为您的动机是将其弹出到根视图控制器。 但是,如果您仍然出于某些匿名原因要实现此功能,则在第三个视图控制器中使用:[self.navigationController popToRootViewControllerAnimated:YES]viewDidAppear方法中,而不是viewWillAppear
我希望它能工作 :)

1

看起来没有任何理由弹回到第三个视图控制器,因为你试图在第三个视图控制器的视图出现之前返回根视图。只需将 -popToRootViewControllerAnimated: 发送给第四个视图控制器即可。


我实际上想做的是从第四个视图控制器中获取一些用户信息。然后我会关闭该视图控制器,可能需要获取更多信息。如果我已经有了所有信息,那么我想回到根视图控制器;否则,我将推送另一个视图控制器以获取更多信息。我想我可以传递信息给第四个视图控制器,以便推送第五个视图控制器获取更多信息,等等,最后在我拥有所需的所有信息后弹出到根视图。 - DNewell
将调用放在viewDidAppear中似乎运行良好,但是我确实会看到其他视图一瞬间的情况,这看起来不太专业。除了更改架构之外,是否有其他解决方法? - DNewell
从用户体验的角度来看,为了获取更多信息,推出第五个控制器会对用户来说更加清晰明了。 - Mark Adams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接