iOS:删除的取消按钮在使用搜索 Controller 后重新出现

标签 ios uisearchbar abpeoplepickerview

我在我的应用程序中使用 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;

}

这很好用。但是,当我使用搜索 Controller 并退出时,我的右上角按钮突然变为“取消”按钮(见下图)。我怎样才能解决这个问题?提前致谢。

enter image description here

最佳答案

好的,刚刚知道如何解决这个问题。我刚刚添加了一个通知,以查看键盘何时隐藏,并将按钮添加回导航栏。

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

关于iOS:删除的取消按钮在使用搜索 Controller 后重新出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16533781/

相关文章:

ios - iOS8 无法从联系人列表中选择人员

ios - 如何确定具有角度的最近 CGPoint 和另一个 CGPoint

ios - 尝试等待 NSURLConnections 组完成

ios - xcode 5.1 中的 Arm64 架构

ios - 弹出框内的 UISearchDisplayController - 取消搜索时动画效果不佳

macos - cocoa:有没有办法自定义Cocoa库提供的 View (例如ABPeoplePicker View)

ios - 在 iOS 8 中自定义 ABPeoplePickerNavigationController 的导航栏

React Native 中的 iOS 启动屏幕

ios - UISearchController UISearchBar 背景

ios - 修改 UISearchBar 取消按钮字体文字颜色和样式