2011-11-30 42 views
6

我正在使用故事板。我有一個UITableView與一個原型單元格。這個單元格的風格是「小標題」。我已經從單元格中添加了一個segue到詳細視圖。所以當用戶點擊一個單元格時,它會打開相應的編輯器......這一切都很好。UISearchDisplayController的搜索結果與搜索表格相比具有其他單元格佈局和行爲

現在我添加了一個UISearchDisplayController和一個UISearchBar,實現了代表。這很好。

但是在搜索結果表格中,單元格的樣式爲「默認」且不可用。爲了讓結果表看起來像「未檢索」表一樣行事,我該怎麼做?

+1

其原因是UISearchDisplayController創建它自己的UITableView,因此它使用默認單元格創建它。 –

回答

8

發現問題...

方法

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

被拉離的tableView,這是結果的情況下不從的tableView故事板而是從SearchDisplayController的resultTableView細胞。

我現在從單元格中的表格視圖中獲取單元格以顯示這兩種情況,現在它可以工作。

+0

嗨Shingoo - 你介意解釋還是顯示你的代碼解決了這個問題? – dnstevenson

+1

我的視圖不是普通的tableview。我需要一個背景圖像,所以tableview被嵌入到uiview中。視圖控制器有一個表視圖的出口。當調用cellForRowAtIndexPath時,我現在從tableView出口獲取單元格,所以單元格總是從在界面生成器中定製的tableview中派生出來的。 – Shingoo

0

這個here有一個可能的答案。它可能不適合你,但正如我所解釋的,UISearchDisplayController創建了表視圖。

檢查的文件,你可以得到更好的理解它,但它指出:

您初始化一個搜索欄,負責管理原始內容是搜索顯示控制器和 視圖控制器搜索到 。當用戶開始搜索時,搜索顯示控制器 負責將搜索界面疊加在原始視圖控制器的視圖上並顯示搜索結果。 結果顯示在由搜索 顯示控制器創建的表格視圖中。除了原始視圖控制器之外, 在邏輯上還有四個其他角色。這些通常都是由同一個對象(通常是原始視圖控制器本身)發揮的。

+0

感謝您的回答。我調試了我的代碼,並且調用了數據源方法。正確的單元格也從故事板中拉出來,並填充正確的數據,但結果表格顯示了默認的表格單元格樣式...我無法弄清楚爲什麼... – Shingoo

24

我想爲答案#1這個貢獻是我做的,它的方法很適合我

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

而不是從參數分配單元的tableView

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

直接從視圖上的TableView分配它,所以你必須替換這個

// UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

與此

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
+0

你提供的代碼什麼都不做。 –

+0

這幫了我。由於所有原型單元格都在「正常/原始」TableView上,而不是「Search」TableView中,因此使用self會是一個不錯的提示。而不是傳遞tableview的參數! –

0

在我的情況UISearchDisplayController使用正確的細胞類型(自定義),但細胞的高度是錯誤的,所以我不得不使用

(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

的方法來解決它。

3

我一直在使用ios 7.0和Xcode 5.0。我發現搜索顯示控制器使用與委託視圖控制器相同的tableview佈局。你所要做的就是判斷當前tableview是委託視圖控制器的tableview還是搜索顯示控制器的tableview。但記得要加一句

​​

在下面的代碼片段:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
// Return the number of rows in the section. 
if (tableView == self.searchDisplayController.searchResultsTableView) 
{ 
    tableView.rowHeight = self.tableView.rowHeight;//very important! 
    return [self.searchResults count]; 
} 
else 
{ 
    ... 
    return ...; 
} 
} 

,如果你忘記實現這句話,然後搜索顯示的表視圖的行是唯一一樣高默認行,這使您認爲它看起來不像「未檢索」表。

+0

這真的救了我,謝謝! –