2012-06-14 101 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; 
}