创建智能搜索在NSMutableArray中类似于在XCode中匹配

时间:2017-07-31 07:34:30

标签: swift xcode

我在UITableView中添加搜索。我想添加像XCode中使用的智能搜索

例如

关键字

刺痛

应与

匹配
  1. 智能搜索的荷兰国际集团

  2. 智能观看的荷兰国际集团

  3. 我还希望在UITableView中生成UILabel中匹配字母的粗体

    XCode也使用了这种搜索

    我是从XCode附加快照

    enter image description here

    我们如何实现这一目标

    注意:这不是正常搜索。

3 个答案:

答案 0 :(得分:1)

//Filter within Tableview delegate functions

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", SEARCH_TEXT];
    NSArray *filtered = [arrayCategories filteredArrayUsingPredicate:predicate];
    return filtered.count
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:@"CELLSEARCH"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", SEARCH_TEXT];
    NSArray *filtered = [arrayCategories filteredArrayUsingPredicate:predicate];

    [cell.textLabel setText:filtered[indexPath.row]];
    return cell;
}

答案 1 :(得分:1)

我认为这就是你要找的东西

let arr = ["job","smart","hating","eating","luck","cup",]
let charset = CharacterSet(charactersIn: "smarting")
for str in arr
{
    if str.lowercased().rangeOfCharacter(from: charset) != nil
    {
    print(str)
    }
}

<强>输出

智能 恨 吃

答案 2 :(得分:0)

如果您想显示@DatabaseField Country country; 的结果。您可以使用array。您需要在NSPredicate中添加所有字符串,并使用另一个数组来显示已过滤的结果,如:

array

如果你有一系列词典,那么只需用这个词替换过滤线

//filter content from array:
- (void)filterContentForSearchText:(NSString*)searchText {

    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", searchText];
    YOUR_FILTERED_ARRAY = [[YOUR_ARRAY filteredArrayUsingPredicate:resultPredicate] mutableCopy];

}

REFERENCE用于谓词。

YOUR_FILTERED_ARRAY = [[YOUR_ARRAY filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(name contains[c] %@)", searchText]]mutableCopy]; //name is the "key" and search text is the matching value!

Apple API Doc

SWIFT 3x:

filteredarrayusingpredicate