删除ABPeoplePickerNavigationController中的取消按钮。奇怪的行为iOs 4.x

问题描述:

我想删除ABPeoplePickerNavigationController的导航栏中的取消按钮,因为我想要一个添加按钮。 我定制的导航控制器委托这样:删除ABPeoplePickerNavigationController中的取消按钮。奇怪的行为iOs 4.x

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{ 


switch ([navigationController.viewControllers count]) { 

    case 0: { 

     viewController.navigationItem.rightBarButtonItem = nil; 
     break; 

    } 

    case 1: { 

     viewController.navigationItem.rightBarButtonItem = nil; 
     break; 
    } 

    case 2: { 



     UIBarButtonItem *addButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPerson:)]; 
     [viewController.navigationItem setRightBarButtonItem:addButtonItem animated:NO]; 
     [addButtonItem release]; 



     UIBarButtonItem *cancelButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel:)]; 
     [viewController.navigationItem setLeftBarButtonItem:cancelButtonItem animated:NO]; 
     [cancelButtonItem release]; 



     NSLog(@"View 2 %@",viewController.navigationItem.rightBarButtonItem); 


     break; 
    } 
    case 3: { 

      UIBarButtonItem *editButtonItem; 

      if ([viewController isKindOfClass:[ABPersonViewController class]]) {  

        editButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editPerson:)]; 
        self.personView = (ABPersonViewController*) viewController; 
        self.personView.allowsEditing = YES; 
        self.personView.personViewDelegate = self; 
        [viewController.navigationItem setRightBarButtonItem:editButtonItem animated:NO]; 
        [editButtonItem release]; 

      } else { 
     // ABPersonNewViewController 
     //No need to add codes here 
      } 

      break; 
    } 

    default: { 




     break; 
    } 

} 

它工作在IOS 3.x和IOS 5.x的罚款,但在iOS的4.x的我总是在导航栏中的取消按钮时联系人列表出现,但如果我选择一个联系人,然后回到第一个视图控制器添加按钮将出现。

如何才能解释这种奇怪的行为只在iOS 4.x?

我找到了解决办法:

-(void)viewDidAppear:(BOOL)animated { 


NSLog(@"Contacts view did appear"); 

[super viewDidLoad]; 
picker = [[ABPeoplePickerNavigationController alloc]init]; 
[picker setDelegate:self]; 
[picker setAllowsCancel:NO]; 

self.picker.navigationBar.tintColor = [UIColor blackColor]; 
[self presentModalViewController:picker animated:YES]; 

}

所以,如果你想删除的iOS 4.x的取消按钮,你必须加入这一行: [选择器setAllowsCancel:NO]; 我收到来自编译器的警告,但现在的取消按钮在IOS 4.x的除去

[picker setAllowsCancel:NO]; 

//拾取器是的ABPeoplePickerNavigationController的对象。