2012-06-14 143 views
1

Im新的objC和我目前正在試驗UISearchDisplayController。基本上我有一個字符串數組作爲我的數據,我使用UISearchBarDisplayController來過濾我的數據。當我將searchText輸入到搜索欄時,我能夠檢索正確的值。但是,當我的searhBar文本爲空時,tableView消失。防止UISearchDisplayController隱藏UiTable

是否有可能防止tableView隱藏在這種情況下。我想要的只是如果searchBar文本爲空,只需在表格中顯示數組中的所有值。

我檢查了表的隱藏/ alpha/frame屬性,並試圖解決我的問題,但我認爲我在這裏錯誤的路徑。我在想如果我需要繼承UISearchDisplayController並重寫[setActive:YES animated:YES];?任何暗示將不勝感激。

+0

試着子類的UISearchDisplayController並覆蓋[SETACTIVE:動畫:]方法和設置的tableView的一些性質只是爲了讓它出現在屏幕上。但仍然沒有運氣,無法弄清楚這一點。 :( – TheNitram

回答

0

我結束了與UISearchBar和UITable的工作。 所以這裏是我遇到的場景。

  1. 單擊searchBar時顯示UITable。
  2. 當searchText爲空時,UITable顯示我plist的所有數據。
  3. UITable顯示過濾結果從我plist匹配searchText。
  4. 在按下搜索按鈕時關閉鍵盤,但不要禁用searchBar上的取消按鈕。
  5. 取消按鈕時按UITable刪除。

我現在沒有用於顯示錶格的動畫,但這適用於我。另外,我在搜索過程中允許用戶交互和滾動我的桌子,所以在這種情況下不需要重疊。現在很高興工作。 :)

我爲那些可能需要的人創建了一個示例項目。這裏是link。對於混亂的代碼抱歉並泄漏問題。只是發佈這個分享。 :)

0

您應該接收任何對搜索參數進行更改的事件,包括字符串爲空時。

如果您更改該委託方法的實施以檢查該字符串是否爲空,則可以返回原始數據而不是過濾的數據。這應該實現你所要求的而不需要子類化。

+0

即時通訊的問題是,當searchController變爲活動狀態時,tableView不可見,而是我只能看到黑色的疊加層,當搜索字符串爲空時,它就會消失,我嘗試調用[searchBar:textDidChange:]在[searchBarTextDidBeginEditing:]內,但我不能讓表顯示何時searchBarTextDidBegin方法被調用。 – TheNitram

0

您可以通過始終在搜索文本框留下了零空間寬字符嘗試:

static NSString* zsp = @"\u200B"; 

//In the UISearchBarDelegate 

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    if(searchBar.text.length == 1 && [text isEqualToString:@""]) 
    { 
     searchBar.text = zsp; 
     return NO; 
    } 

    return YES; 
}