1

我是 objC 的新手,我目前正在尝试 UISearchDisplayController。基本上我有一个字符串数组作为我的数据,我使用 UISearchBarDisplayController 来过滤我的数据。当我在搜索栏中输入我的 searchText 时,我能够检索到正确的值。但是,当我的 searhBar 文本为空时,tableView 会消失。

在这种情况下是否可以防止 tableView 隐藏。如果 searchBar 文本为空,我想要的只是在表中显示我的数组中的所有值。

我检查了表格的 hidden/alpha/frame 属性并试图在这里解决我的问题,但我认为我在这里走错了路。我在想是否需要继承 UISearchDisplayController 并覆盖 [setActive:YES animated:YES];?任何提示将不胜感激。

4

3 回答 3

0

您应该收到搜索参数的任何更改的事件,包括字符串为空时。

如果更改该委托方法的实现以检查字符串是否为空,则可以返回原始数据而不是过滤后的数据。这应该可以实现您的要求,而无需子类化。

于 2012-06-14T07:32:43.930 回答
0

我最终使用了 UISearchBar 和 UITable。所以这里是我遇到的场景。

  1. 单击 searchBar 时显示 UITable。
  2. 当 searchText 为空时,UITable 会显示我的 plist 中的所有数据。
  3. UITable 显示我的 plist 中与 searchText 匹配的过滤结果。
  4. 按下搜索按钮时关闭键盘,但不要禁用搜索栏上的取消按钮。
  5. 按下取消按钮时删除 UITable。

我现在没有显示表格的动画,但这对我有用。此外,我允许用户在搜索期间在我的表格上进行交互和滚动,因此在这种情况下不需要覆盖。很高兴它现在工作。:)

我为可能需要的人创建了一个示例项目。这是链接。为混乱的代码和泄漏问题道歉。刚发这个分享一下。:)

于 2012-06-15T04:51:11.090 回答
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;
}
于 2014-07-31T10:06:40.130 回答