0

アプリで ABPeoplePickerNavigationController を使用しており、UINavigationControllerDelegate を使用してナビゲーション バー ボタンを独自のものにオーバーライドしました。

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    navigationController.topViewController.searchDisplayController.searchBar.barStyle = UIBarStyleBlack;

    navigationController.topViewController.navigationItem.leftBarButtonItem = nil;
    navigationController.topViewController.navigationItem.rightBarButtonItem = nil;

    UIBarButtonItem *cancelButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
                                                                                      target:self
                                                                                      action:@selector(cancel:)];
    navigationController.topViewController.navigationItem.leftBarButtonItem = cancelButtonItem;

    UIBarButtonItem *addButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
                                                                                       target:self
                                                                                       action:@selector(addItem:)];
    navigationController.topViewController.navigationItem.rightBarButtonItem = addButtonItem;

}

これはうまくいきます。ただし、検索コントローラーを使用して終了すると、右上のボタンが突然 [キャンセル] ボタンに変わります (下の画像を参照)。どうすればこれを修正できますか? 前もって感謝します。

ここに画像の説明を入力

4

2 に答える 2

1

OK、これを修正する方法を見つけました。キーボードがいつ非表示になるかを確認する通知を追加し、ボタンをナビゲーション バーに追加しました。

1) プロパティ mainNavigationController を宣言して合成します。

@property UINavigationController *mainNavigationController;

2) (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animation:(BOOL)animated に、以下を追加します。

mainNavigationController = navigationController;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onNotification:) name:UIKeyboardWillHideNotification object:nil];

3) メソッド onNotification を追加します。

-(void)onNotification:(NSNotification*)notification
{
    UIBarButtonItem *addButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
                                                                                   target:self
                                                                                   action:@selector(addItem:)];
    mainNavigationController.topViewController.navigationItem.rightBarButtonItem = addButtonItem;
}
于 2013-05-14T02:16:58.223 に答える
0

これを修正するには、 を実装<UISearchDisplayDelegate>し、navigationController:willShowViewController:animated:メソッドで searchDisplayController のデリゲートを self に設定する必要がありますviewController.searchDisplayController.delegate = self;

于 2014-04-24T23:39:06.327 に答える