![](/img/trans.png)
[英]"Cancel" button (UIBarButtonItem) not working in iOS view controller
[英]iOS: Removed cancel button reappears after using search controller
我在我的應用程序中使用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;
}
這很好。 但是,當我使用搜索控制器退出其中時,右上角的按鈕突然變為“取消”按鈕(請參見下圖)。 我怎樣才能解決這個問題? 提前致謝。
好的,只是想出了解決方法。 我剛剛添加了一條通知,以查看何時隱藏鍵盤,並將按鈕添加回導航欄。
1)聲明並綜合屬性mainNavigationController:
@property UINavigationController *mainNavigationController;
2)在(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController動畫化:(BOOL)動畫中,添加:
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;
}
要解決此問題,您必須實現<UISearchDisplayDelegate>
並在navigationController:willShowViewController:animated:
方法中,將searchDisplayController的委托設置為self viewController.searchDisplayController.delegate = self;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.