导航栏中的UISearchBar

Sam*_*mui 51 uinavigationbar uisearchbar ios

如何在NavigationBar中显示UISearchBar?

我无法弄清楚如何做到这一点.

非常感激您的帮忙.

Bor*_*zin 85

将searchBar放入navigationBar的中心:

self.navigationItem.titleView = self.searchBarTop;
Run Code Online (Sandbox Code Playgroud)

将searchBar放在navigationBar的左/右侧:

UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBar];
self.navigationItem.rightBarButtonItem = searchBarItem;
Run Code Online (Sandbox Code Playgroud)

  • 如果我这样设置,`searchDisplayController`就不再显示了.也不调用`cellForRowAtIndexPath:`方法.使用`searchDisplayController.displaysSearchBarInNavigationBar`可以使用但是我不能使用它,因为我也支持iOS 6 ... (2认同)

Jam*_*ang 20

从iOS 7开始,UISearchDisplayController默认支持此功能.设置UISearchDisplayController displaysSearchBarInNavigationBar = YES以使其轻松工作.

根据文件:

在IOS 7.0开始,您可以通过配置搜索显示控制器的displaysSearchBarInNavigationBar和navigationItem属性使用了导航栏(UINavigationBar的类的实例)的搜索显示控制器.

  • 这使搜索栏占据整个导航栏,隐藏任何现有的左栏和右栏.我怎么能保留那些? (8认同)
  • 我尝试了这个,但我的搜索栏位于屏幕中间! (6认同)
  • 使用Storyboard时最简单的方法是将"搜索栏"和"搜索显示控制器"从"实用程序区域"拖动到"文档大纲"中当前场景的底部.之后只需在viewdidload中添加`self.searchDisplayController.displaysSearchBarInNavigationBar = YES;`.您可能希望在编辑时显示取消按钮或隐藏后退按钮,这样可以在委托实现中完成. (5认同)

dji*_*i33 12

正如一位评论者指出的那样,使用searchDisplayController.displaysSearchBarInNavigationBar = true最终隐藏任何现有的左/右栏按钮项.

我找到了两种不同的方法来添加searchBar一个navigationBar使用iOS7的新属性searchDisplayController.

1)基于笔尖的方法

如果您使用的是.xib,则可以为此值设置用户定义的运行时属性,无论出于何种原因,leftBarButtonItem保持不变.我还没有用rightBarButtonItem测试它.

在此输入图像描述

2)代码(时间问题)

如果你想在代码中实现,时间似乎很重要.看来你必须先添加searchBar到第navigationBar一个,然后设置你的barButtonItem.

- (void)viewDidLoad
{
    ...
    self.searchDisplayController.displaysSearchBarInNavigationBar = true;
    self.navigationItem.leftBarButtonItem = [UIBarButtonItem new];
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 从iOS 8.0开始,SearchDisplayController似乎已被弃用. (3认同)

Ste*_*ser 11

查看Apple的UICatalog示例代码.它显示了如何以UISearchController三种不同的方式使用新的:模式,导航栏和导航栏下方.