2011-02-23 149 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