2009-08-10 71 views
7

我有一個UITabBar控制器管理多個控制器(使用SDK 3.0)。其中一個是tableView控制器,我需要使用UISearchDisplayController提供搜索功能。我所有的代碼都基於Apple TableSearch示例。但是,單擊選項卡時,tableView控制器將顯示其相關內容,但不會顯示searchBar。我已經在IB中檢查了xib,以確保所有插座都正確設置,但無論我嘗試使用self.searchDisplayController始終爲零,並且搜索欄不顯示。如何從UITabBar控制器內的控制器使用UISearchDisplayController?

實際上,我從TableSearch示例中複製了MainView.xib,並將該文件的所有者類設置爲該選項卡的正確控制器類。插座的設置與示例MainView.xib中的一樣。我是否錯過了任何重要的步驟或做錯了什麼?

預先感謝您。

回答

1

好的,我發現如何解決它。在我的情況下,問題是由於我使用嵌入在UITabBarController中的控制器作爲其託管標籤之一(即作爲子標籤)。

從UITabBarController中刪除控制器,然後將UINavigationController添加到UITabBarController,最後將我的控制器作爲UINavigationController的子項解決完全問題。

我不明白爲什麼會這樣(文檔中沒有相關信息,因爲經常發生);然而,它現在像一個魅力。 以親切的問候。

+0

這仍然適用於2017年11月。有一個很好的圖表顯示如何將UINavigationController添加到標籤頁[此處](https://stackoverflow.com/a/37357242/1359088)。 – 2017-11-14 21:19:43

1

我也有這個問題:(是搜索欄得到隱藏在背後的tableview?

@unforgiven, 你試試這個...?

searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 40)]; 
[self.tableView setTableHeaderView: searchBar]; 

這手動創建一個搜索欄和它的工作原理,但我做了一些愚蠢的錯誤在IB的搜索欄沒有顯示出來,儘管我的連接是完美的。:-(

做,如果你得到的答案更新這個帖子...

1

我有一個類似的問題

爲了解決我必須做一個額外的步驟unforgivens回答 在我的主要筆尖

1)創建UITabController 2)然後我拖出UINavigational控制器進入選項卡控制器 3)然後將UITableViewController作爲子項拖入NavigationalController中4)然後在檢查器中將(3)類更改爲MyTableWithSearchBarViewController - 檢查nib名稱是否正確,並在檢查器中將其更改爲井 5)那我必須刪除步驟(3)中由IB自動創建的tableView。只有這樣,在搜索欄中顯示正確...

如果在第3步我拖出不同的控制器走上舞臺或離開的tableView有它永遠只能顯示錶,而不是搜索欄

怪異

5

我有同樣的問題,碰巧偶然發現這個解決方案...

如果您使用Interface Builder在選項欄或導航控制器中嵌套了表格視圖控制器(例如UISearchDisplayController),則需要在「屬性檢查器」窗口中設置「筆尖名稱」。

筆尖名稱將是持有表格視圖並將控制器(例如UISearchDisplayController)作爲文件所有者的名稱。

1

如果您的nib文件包含UITableViewController,Tomtrapeze有正確的答案。但是,如果您在代碼中加載UITableViewController - 例如將其推入UINavigationController的堆棧中,則解決方案會有所不同。

初始化UITableViewController或子類時,需要使用初始值設定項的-initWithNibName:bundle:形式並指定nib文件的名稱。或者,您可以使用標準的-initWithStyle:初始值設定項,並在視圖加載之前手動設置nibName屬性。

如果在視圖加載時未設置nibName屬性,UITableViewController將不會使用普通的UIViewController筆尖查找邏輯。它只會加載一個標準的UITableView。

0

另一個可能的修復爲我的作品是initWithNibName給init的UITableViewController:包:

SearchEntryTableViewController* searchEntryTableViewController = [[SearchEntryTableViewController alloc]initWithNibName:@"SearchEntryTableViewController" bundle:nil]; 

要巢中的UITableViewController一個UINavigationController把前一個的UITabBarController不解決這個問題對我來說。 ..

1

我最近得知,當NIB文件與班級名稱相同(即MyViewController.xib)時,我可以加載NIB文件[[MyViewController alloc] initWithNibName:nil bundle:nil];。事實證明,初始化這種方式會導致'UISearchBar and UISearchBarDisplayController`不顯示。當我通過輸入類的名字初始化視圖控制器時,我的搜索欄正確顯示。我最初認爲這與我如何呈現視圖控制器有關,但很高興它不是。

PGWSearchViewController *searchVC = [[PGWSearchViewController alloc] initWithNibName:@"PGWSearchViewController" bundle:nil]; 

searchVC.modalPresentationStyle = UIModalPresentationFullScreen; 
searchVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 

[self presentViewController:searchVC animated:YES completion:^{ }]; 

這是使用iOS SDK 5.1和XCode 4.3.1。

+0

是的,使用SDK 5.1,現在情況好多了。 – 2012-05-10 05:31:56