如何确定是否显示后退按钮?

时间:2011-10-27 17:16:57

标签: ios

在iOS应用中,如何确定是否显示后退按钮?理想情况下,我想在控制器的loadView方法中知道这一点。

以下是我在loadViewviewDidLoadviewWillAppear中尝试过的内容:

if (self.navigationItem.backBarButtonItem)

和此:

if (self.navigationItem.leftBarButtonItem)

这些都不起作用 - 即使屏幕上有后退按钮,它们总是为零(表达式的计算结果为false)。我最不想做的是将取消按钮设置为self.navigationItem.leftBarButtonItem,但前提是没有后退按钮。如果有后退按钮,我们不需要取消按钮。实际上,设置leftBarButtonItem会覆盖后退按钮,所以我们一直看到一个取消按钮 - 即使应该有一个后退按钮。

5 个答案:

答案 0 :(得分:17)

你问backBarButtonItem的错误对象。此属性控制对象在导航堆栈中的“后退”项目时的表示方式。

因此,您需要在导航堆栈中的下面的级别询问视图控制器backBarButtonItem是什么:

int n = [self.navigationController.viewControllers count] - 2;
if (n >= 0)
    if ([(UIViewController*)[self.navigationController.viewControllers objectAtIndex:n]navigationItem].backBarButtonItem == nil)
        // Do your thing....

您可能需要在执行此代码时检查导航控制器是否已将viewController添加到堆栈,顶视图控制器可能仍然是前一个。我已经检查了viewWillAppear,此时堆栈确实包含了新的顶级控制器。

答案 1 :(得分:3)

NSLog(@"%@",self.navigationController.navigationBar.backItem);
if (self.navigationController.navigationBar.backItem == NULL) {
    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(addLaunch)];
    self.navigationItem.leftBarButtonItem = cancelButton;
    [cancelButton release];
}

这个代码有效,它在viewDidAppear中,如果你的控制器是null,那么没有按钮,所以我添加了取消按钮,它不是后面的项目,只是常规:]希望这有帮助

答案 2 :(得分:0)

loadView太早了。您最早可以查看此内容的是viewDidLoad。您可能需要等待viewWillAppear

答案 3 :(得分:0)

搜索以下

self.navigationController.navigationBar.backItem

而不是backBarButtonItem

如果存在backItem,那么您将进入导航堆栈,而不是rootViewController。

答案 4 :(得分:0)

只需使用此代码:

if (![[[self.parentViewController childViewControllers] firstObject] isKindOfClass:[self class]]) {

}