2011-02-23 150 views

回答

82

为了把搜索栏到的导航栏的中心:

self.navigationItem.titleView = self.searchBarTop; 

为了把搜索栏的左/右侧的导航栏的:

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

我有这样的问题,在iPad上,结果显示在嵌入在弹出窗口中的表视图中,而不是原始表视图的框架中。任何解决方案? – Norbert 2013-10-05 08:57:01

+2

如果我这样设置,searchDisplayController不再显示。 'cellForRowAtIndexPath:'方法也不被调用。 使用'searchDisplayController.displaysSearchBarInNavigationBar'工作,但我无法使用它,因为我也支持iOS 6 ... – jdev 2015-03-02 22:57:09

+1

此方法隐藏标题 – Panos 2016-11-08 18:20:29

20

作为的iOS 7中,UISearchDisplayController默认支持此。设置UISearchDisplayController的displaysSearchBarInNavigationBar = YES可以很容易地工作。

每文档:

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

+0

根据Apple的文档,它看起来像我们不能在titleView中设置searchBar。我对吗?你能告诉我们如何设置searchDisplayController的navigationItem吗?谢谢 – NLemay 2013-09-24 18:01:38

+6

我试过了,但我的搜索栏位于屏幕中间! – 2013-10-05 16:49:33

+5

使用故事板时最简单的方法是将“搜索栏”和“搜索显示控制器”从实用工具区拖出到文档大纲内的当前场景的底部。之后,在viewdidload中添加'self.searchDisplayController.displaysSearchBarInNavigationBar = YES;'。您可能想要在编辑时显示取消按钮或隐藏后退按钮,这可以在委托实施中完成。 – Bohrnsen 2013-10-06 19:59:58

12

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

我发现了使用iOS7的searchDisplayController的新属性将searchBar添加到navigationBar的两种不同方法。

1)根据笔尖方法

如果您使用的是的.xib,你可以为这个值,不管出于什么原因,在leftBarButtonItem停留在机智设置一个用户定义的运行属性。我没有用rightBarButtonItem测试过它。

enter image description here

2)代码(定时事项)

如果你想在代码来实现,时间似乎无关紧要。看起来您必须先将searchBar添加到navigationBar,然后设置您的barButtonItem

- (void)viewDidLoad 
{ 
    ... 
    self.searchDisplayController.displaysSearchBarInNavigationBar = true; 
    self.navigationItem.leftBarButtonItem = [UIBarButtonItem new]; 
    ... 
} 
+1

我试过(1)故事板,它崩溃。这个类不是关键的值,它们是关键字displaysSearchBarInNavigationBar。 – 2014-03-13 01:19:36

+0

您可以在StoryBoard中执行此操作,但需要将其设置在搜索显示控制器上,而不是视图控制器上;然而,它并没有在我的测试中保留正确的按钮项,但它确实将搜索栏放在了导航栏中。 – Peter 2014-04-15 20:49:16

+1

您可以在StoryBoard中设置具有引用插座的UIBarButtonItems中使用#2。而不是上面的[UIBarButtonItem new]:'''self.navigationItem.leftBarButtonItem = self.leftButton'''(其中self.leftButton是左按钮的出口)。 – Peter 2014-04-15 20:53:04

8

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

+0

这些样本帮了我很多。谢谢! – 2017-07-06 10:35:16