如何在 UINavigation 中显示 UISearchBar?

Posted

技术标签:

【中文标题】如何在 UINavigation 中显示 UISearchBar?【英文标题】:How display UISearchBar in UINavigation? 【发布时间】:2013-12-04 07:57:00 【问题描述】:

我在导航栏中有搜索图标,在 TableViewHeader 中有 UISearchBar。 我想隐藏 UISearchBar 但在以下情况下显示和隐藏:

UISearchbar 显示:点击搜索图标,然后消除导航并显示它。

UISearchBar hide:按取消隐藏搜索并显示导航返回。

请帮帮我!!

谢谢。

这是我到目前为止所做的。

- (void) viewDidload

self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
        self.searchBar.placeholder = @"Search";
self.searchBar.delegate = self;

[self.searchBar sizeToFit];

self.strongSearchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self];
self.searchDisplayController.searchResultsDataSource = self;
self.searchDisplayController.searchResultsDelegate = self;
self.searchDisplayController.delegate = self;

self.tableView.tableHeaderView = self.searchBar;


_btnSearch = [UIButton buttonWithType:UIButtonTypeCustom];
_btnSearch.frame = CGRectMake(0, 0, 22, 22);
[_btnSearch setImage:[UIImage imageNamed:@"search_btn.png"] forState:UIControlStateNormal];
[_btnSearch addTarget:self action:@selector(showSearch:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *searchItem = [[UIBarButtonItem alloc] initWithCustomView:_btnSearch];

self.navigationItem.rightBarButtonItems = _btnSearch;

这是我点击图标搜索时的操作

- (IBAction)showSearch:(id)sender
    [self.searchBar becomeFirstResponder];

我不想将我的搜索放在 tableView 中,当我点击搜索图标时我怎么还能显示 UISearchBar?

另一个问题:当我调用 [self.searchBar becomeFirstResponder];它不好用。取消按钮根本不起作用。

请帮帮我。

【问题讨论】:

如果我没记错的话,在图片中这是UISearchbarController @Virussmca 不,这只是图标。单击图标后,我想显示 UISearchBar 。你能帮帮我吗? 【参考方案1】:

将searchBar放到navigationBar的中心:

self.navigationItem.titleView = self.searchBar;

将 searchBar 放在 navigationBar 的左侧/右侧:

UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:self.searchBar];
self.navigationItem.rightBarButtonItem = searchBarItem;

ios 7 开始,UISearchDisplayController 默认支持此功能。设置 UISearchDisplayController 的 displaysSearchBarInNavigationBar = YES

【讨论】:

@Viruss mca 我只想显示 UISearchBar 并隐藏 UINavigation。当 UISearchBar 出现时,它会隐藏 UINavigation。当单击 UISearchBar 中的取消按钮时,它将自行消除并显示 UINavigation。你能帮我吗?我需要它。 @MabKaaKoo:你检查 UISearchDisplayController 了吗? @Virussmca,我已经更新了我上面的问题。你能检查一下并帮助我吗?谢谢

以上是关于如何在 UINavigation 中显示 UISearchBar?的主要内容,如果未能解决你的问题,请参考以下文章

UINavigation 堆栈显示奇怪的消息

IOS Swift CNContactViewController 导航栏不显示 UINavigation 控制器

如何将按钮添加到 UINavigation 项?

应该如何创建 UINavigation 工具栏子视图项 Interface Builder?

关闭模态 UINavigation 控制器

MvvmCross Tabs 控制器包装到 UINavigation 控制器中?