如何处理用 UISearchBar 和 UITableView 逐字搜索?

Posted

技术标签:

【中文标题】如何处理用 UISearchBar 和 UITableView 逐字搜索?【英文标题】:How to deal with searching piece of word in word with UISearchBar and UITableView? 【发布时间】:2013-01-07 23:17:57 【问题描述】:

我是 UISearchBar 的新手,我有一些用于搜索单词的代码。

- (void)searchTableView

NSLog(@"Searching...");
NSString *searchText = searchBar.text;

NSMutableArray *tempSearch = [[NSMutableArray alloc] init];

for (NSDictionary *item in items) 

    if ([[item objectForKey:@"en"] isEqualToString:searchText]) 
        NSLog(@"Found");

        [tempSearch addObject:item];
    


searchArray = [tempSearch copy];

它有效,但问题是它仅适用于完整的单词(例如,如果在UITableViewCell 中的textLabel 中是文本“something”并且我在UISearchBar 中输入“something”,那么我已经返回了这一行,但是当我输入“some”时,当完整的单词是“some”时,我有行,“something”没有显示)。我怎样才能用我的方法搜索正确的文本?

【问题讨论】:

【参考方案1】:

使用NSPredicate 可以稍微简化搜索:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"en BEGINSWITH %@", searchText];
NSArray *tempSearch = [items filteredArrayUsingPredicate:predicate];

如果您想要不区分大小写的搜索,请将BEGINSWITH 替换为BEGINSWITH[c]

有关详细信息,请参阅“谓词编程指南”中的 Using Predicates。

【讨论】:

【参考方案2】:

好的,我有一些东西,但不是 100% 正确。

for (NSDictionary *item in items) 

    NSRange range = [[item objectForKey:@"en"] rangeOfString : searchText];
    if (range.location != NSNotFound) 

        NSLog(@"Found");

        [tempSearch addObject:item];
    

当我输入“e”时,我得到了“some”、“something”、“else”——我认为正确的是只有“else”会被返回。

好的,我知道了。

    if (range.location != NSNotFound && range.location == 0) 

【讨论】:

以上是关于如何处理用 UISearchBar 和 UITableView 逐字搜索?的主要内容,如果未能解决你的问题,请参考以下文章

默认情况下在 UICollectionView 中滚动 UISearchBar

UISearchController 中的 UISearchBar 不会消失

我们如何为多个 UITab 使用相同的 WKWebView

可移植类库:推荐替换 [Serializable]

在 UISearchBar 和 UITableView 上方添加 UILabel,如 WhatsApp 联系人

如何为自定义的 UISearchBar 实现 scopeButtonTitles?