在我的导航视图控制器上创建后退按钮,无法隐藏它

时间:2013-07-24 00:34:49

标签: iphone ios objective-c uinavigationcontroller uinavigationitem

我有一个导航视图控制器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];

这些都没有带走后退按钮!我不知道该怎么做,任何建议/帮助将不胜感激我仍然是一个菜鸟。

1 个答案:

答案 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];
}