iOS检查UINavigationController中是否显示Back Button

NKo*_*kov 1 uinavigationcontroller ios

在iOS项目中,我需要检查当前是否显示后退按钮.我已经尝试过在SO上提供的一些解决方案,但它们都没有为我工作.目前我正在使用此代码

NSArray *stack = navigationController.viewControllers;
int i = stack.count-2;

if (i>=0)
{
    UIViewController *backVC = (UIViewController*)[stack objectAtIndex:i];
    if (backVC.navigationItem.backBarButtonItem != nil) {
        NSLog(@"Back button is displayed!");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是日志中没有任何内容.如果我正确理解苹果指南,我正在寻找位于堆栈索引n-2的ViewController,ViewController应该保持一个后退按钮.

我在-navigationController中使用此代码:willShowViewController:animated:

小智 9

我今天遇到了同样的问题,在尝试上述代码的变化后,我决定检测是否应该使用以下方式显示后退按钮:

 self.navigationController.navigationBar.backItem
Run Code Online (Sandbox Code Playgroud)

来自文档:

如果最顶层导航项的leftBarButtonItem属性为nil,则导航栏将显示一个后退按钮,其标题派生自此属性中的项.如果导航栏的堆栈中只有一个项目,则此属性的值为nil ..

这符合我的需求.希望它有所帮助,如果不是我有兴趣听听你如何解决它!


Pra*_*ana 7

这是更可靠并且可能是正确的方法

斯威夫特:

guard let navigationStack = navigationController?.viewControllers, navigationStack.count > 1 else {
    // The back button is not present
    return
}
// The back button is present

Run Code Online (Sandbox Code Playgroud)