1

追加ボタンが欲しいので、ABPeoplePickerNavigationControllerのナビゲーションバーにあるキャンセルボタンを削除したいと思います。ナビゲーションコントローラーデリゲートを次のようにカスタマイズしました。

- (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;
    }

}

iOs3.xとiOs5.xでは正常に動作しますが、iOS 4.xでは、連絡先リストが表示されたときにナビゲーションバーにキャンセルボタンが常に表示されますが、連絡先を選択すると、最初のViewControllerに戻ります。追加ボタンが表示されます。

iOS 4.xでのみこの奇妙な動作をどのように説明できますか?

4

2 に答える 2

1

私は解決策を見つけました:

-(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でキャンセルボタンを削除する場合は、次の行を追加する必要があります。[picker setAllowsCancel:NO]; コンパイラから警告を受け取りましたが、iOS4.xでキャンセルボタンが削除されました

于 2012-02-03T10:38:49.547 に答える
0
[picker setAllowsCancel:NO];

//pickerはABPeoplePickerNavigationControllerのオブジェクトです。

于 2012-05-15T22:00:07.053 に答える