我正在使用一个NavigationController,它的第一个视图控制器是一个没有任何UI的“决策者”类。因此,以root作为根,检查本地数据库,如果我们有某些项目,决策者VC将推送某个VC,或者如果没有项目,它将推送不同的VC。所以它真的像一棵有两个分支的树。
在分支1的某个点,我们有几个VC被推入堆栈,用户可能会删除最后一个“项目”,因此我想调用popToRootViewControllerAnimated并让我的决策者正确路由到分支2。一切正常,除了在导航栏中,我无法摆脱分支2上第一个VC中的后退按钮,它包含分支1中最后一个VC的标题。
这是导航图(有点):
NavController
DecisionMaker
branch1VC1
branch1VC2
branch1VC3
branch2VC1
branch2VC2
如果我们在branch1VC3并且我删除了最后一项然后调用popToRootViewControllerAnimated,它将通过DecisionMaker并正确地降落在branch2VC1,但它有一个带有标签“branch1VC3”的后退按钮。按下按钮时按钮不起作用。我还注意到,当我点击一个不同的按钮 - 它带你到一个“关于页面” - 在底部导航栏中,我会看到在关于页面顶部的正常后退按钮不存在所以我没办法返回。导航基本上就是这一点。
我试过了:
基本上,对我而言,似乎错误的事情可能是根据与新推送到另一个分支相同的UI周期中的root操作。但我不明白为什么那应该是不可行的。我发现this SE question我认为可能是相同的,但实际上没有任何答案。
修改 决定是在做任何我的自定义逻辑和放大之前在DecisionMaker VC上调用super.viewWillAppear。导航
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self decideViewController];
}
答案 0 :(得分:0)
如果在viewWillAppear
中推送视图层次结构,或者在新UI正确加载之前的某个地方,那么它们总会出现问题。确保在正确的时间推送新视图。