如何检测UIViewController是否有后退按钮

时间:2012-12-10 13:10:20

标签: objective-c ios

我有一个扩展UIViewController功能的类别,它将自己的副标题添加到标题栏。它需要知道标题栏中存在哪些按钮,以便它可以调整其中的标签。我可以检测是否存在leftBarButtonItem和rightBarButtonItem,但是当涉及到一个backBarButtonItem时,我尝试过的所有内容都告诉我没有后退按钮,实际上当视图加载时有一个。这就是我以前测试过的:

if(self.parentViewController.navigationItem.backBarButtonItem == nil){
    NSLog(@"no back button");
}
else {
    NSLog(@"has back button");
}

if(self.parentViewController.navigationController.navigationItem.backBarButtonItem == nil){
    NSLog(@"1no back button");
}
else {
    NSLog(@"1has back button");
}

if(self.navigationItem.backBarButtonItem == nil){
    NSLog(@"2no back button");
}
else {
    NSLog(@"2has back button");
}

if(self.navigationController.navigationItem.backBarButtonItem == nil){
    NSLog(@"3no back button");
}
else {
    NSLog(@"3has back button");
}

if(self.presentingViewController.navigationItem.backBarButtonItem == nil){
    NSLog(@"4no back button");
}
else {
    NSLog(@"4has back button");
}

if(self.presentingViewController.navigationController.navigationItem.backBarButtonItem == nil){
    NSLog(@"5no back button");
}
else {
    NSLog(@"5has back button");
}

if(self.presentedViewController.navigationItem.backBarButtonItem == nil){
    NSLog(@"6no back button");
}
else {
    NSLog(@"6has back button");
}

if(self.presentedViewController.navigationController.navigationItem.backBarButtonItem == nil){
    NSLog(@"7no back button");
}
else {
    NSLog(@"7has back button");
}

我已经尝试将它放在viewDidLoad,viewWillAppear和viewDidAppear中,并且它们都返回没有后退按钮。在上一个视图中,我使用self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil];手动设置后退按钮(后退按钮必须说回而不是之前的视图标题)。从逻辑上讲,这意味着self.parentViewController应该告诉我这个视图上是否有后退按钮,但显然不是。

1 个答案:

答案 0 :(得分:1)

如果当前情况为真并且您希望返回按钮说“返回”,则可以遍历寻找该按钮的子视图。

BOOL exists = NO;
for (UIView *view in [self.view subviews]) {
    if ([view isMemberOfClass [UIButton class]]) {
        if([view.title isEqualToString: @"Back"]){
                exists = YES;
        }
    }
}
if(!exists){
     //Add back button
}

enter image description here