如何非动态地显示UISearchBar结果?

时间:2014-03-03 13:47:01

标签: objective-c ios7 uisearchbar

嘿伙计们,我有一段动态搜索的UISearchBar代码。但是由于DataSource是一个非常大的NSArray,搜索过程有一个烦人的滞后,我需要/必须/必须摆脱。

问题是我无法找到一种方法以非动态的方式进行搜索,就像用户输入搜索字符串一样,只有在点击键盘上的搜索按钮后,搜索过程才会出现结果。

我的代码如下:

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {

if (searchText.length == 0) {
    isFiltered = NO;
} else {
    isFiltered = YES;
    filteredCodigos = [[NSMutableArray alloc] init];

    for (NSDictionary *item in values) {
        NSString *strSymbol = [item objectForKey:@"symbol"];
        NSString *strName = [item objectForKey:@"name"];
        NSRange strRangeSymbol = [strSymbol rangeOfString:searchText options:NSCaseInsensitiveSearch];
        NSRange strRangeName = [strName rangeOfString:searchText options:NSCaseInsensitiveSearch];

        if ((strRangeSymbol.location != NSNotFound) || (strRangeName.location != NSNotFound)) {
            [filteredCodigos addObject:item];

        }
    }

}

[_tableView reloadData];
}

1 个答案:

答案 0 :(得分:1)

您可以使用searchBarSearchButtonClicked:搜索栏委托方法来触发搜索,而不是searchBar:textDidChange:

如果使用searchBar:textDidChange:,您还可以在执行搜索之前要求搜索字符串的长度至少为2或3个字符。

您可能还应该考虑更改数据源,而不是使用数组,而是使用Core Data(或类似数据)。因此,您不需要同时处理内存中的所有内容,因此您可以进行有效的搜索。