2014-10-20 58 views
0

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

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!"); 
    } 
} 

但是没有在日志中出现。如果我正确理解苹果指南,我正在寻找位于索引n-2处的堆栈中的ViewController,该ViewController应该保存后退按钮。

我使用这个代码里面 -navigationController:willShowViewController:动画:

回答

7

今天我有同样的问题,并在上​​面的代码试图变化后,我已经在检测到返回按钮是否应显示解决使用:

self.navigationController.navigationBar.backItem 

从文档:

如果最顶端的导航项目的leftBarButtonItem属性是零,则NAVIGAT离子棒显示一个后退按钮,其标题源自该属性中的项目。 如果只有一个导航栏的栈上项目,此属性的值是零..

这对于我的需要的工作。希望它有帮助,如果不是我有兴趣听到你如何解决它!

+0

感谢您的回答!你的解决方案,但行为相当奇怪。在从根视图控制器转到第二个视图控制器之后 - 没有任何反应,但是当我转到第三个视图时,它就起作用了!当我从第三名退到第二名对我来说很奇怪,因为情况与从第二名到第二名时完全一样。如果找到合适的解决方案,我会在这里发帖:) – NKorotkov 2014-10-21 14:31:17

0

有一种可能的方法,但它不是最干净的解决方案。

在查看UINavigationBar的子视图时,存在类型为_UINavigationBarBackIndicatorView的私人视图。如果您直接访问此应用程序将被拒绝从商店。

然而,如果没有返回按钮是由系统该视图仍将保留但具有0

α值通过检查所述导航栏包含具有零α值允许该应用没有添加意见检测是否存在默认后退按钮。

__block BOOL backButtonIsHidden = NO; 

[self.navigationBar.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull view, NSUInteger idx, BOOL * _Nonnull stop) { 
    if(view.alpha == 0) 
    { 
     backButtonIsHidden = YES; 
     *stop = YES; 
    } 
}]; 
相关问题