我有一个导航视图控制器A,它通向控制器B,然后是控制器C.控制器B是一个登录屏幕,因此一旦用户登录,用户就会被带到控制器C.我最初想要做的是拥有在控制器C上的后退按钮,将用户带回控制器A(因为用户已经登录,没有必要让后退按钮将用户带回到作为登录屏幕的控制器B)。我已经成功地做到了这一点,除了一个我似乎无法修复的特殊错误。从控制器C转换到控制器A时,后退按钮将添加到控制器A上的导航栏!控制器A从来没有一个后挡板开始,这让我疯了!
我尝试在viewWillAppear方法中输入以下所有代码:
self.navigationItem.backBarButtonItem = nil;
self.navigationItem.hidesBackButton = YES;
[self.navigationItem setHidesBackButton:YES];
这些都没有带走后退按钮!我不知道该怎么做,任何建议/帮助将不胜感激我仍然是一个菜鸟。
答案 0 :(得分:0)
不要将popToRoot放在viewWillDisappear
方法中。我假设您有一些函数在用户完成Controller C中的注册过程时被调用。在该方法结束时,您需要放置[self.navigationController popToRootViewControllerAnimated:YES]
将其放入viewWillDisappear
,特别是在[super viewWillDissappear]
方法之前,最有可能导致问题。
编辑:
尝试使用超级调用优先构建这样的viewWillDisappear方法:
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController popToRootViewControllerAnimated:YES];
}
编辑:
好吧,我已经得到了实物的工作。从Controller C弹出后,如果不需要再将视图推到其上,这将起作用。更新Controller C中的-viewWillDisappear,如下所示:
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setViewControllers:@[[self.navigationController.viewControllers objectAtIndex:0]] animated:YES];
}