如何在文本字段中执行多个自动完成?

时间:2016-03-15 12:12:56

标签: ios objective-c regex autocomplete uitextfield

我有一个带有一些名字的数组。当我明星打字我创建了一个表,我显示了一个包含可能数据的自动完成表。一旦我选择它出现在文本字段中。 实际问题:我想要做的是,如果在选择了第一个建议后我开始进一步输入并插入“,”并再次开始输入我需要自动完成功能。到目前为止,我已经设法让它只用于初始文本。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    _autocompleteTableView.hidden = NO;
    NSString *substring = [NSString stringWithString:textField.text];
    substring = [substring stringByReplacingCharactersInRange:range withString:string];
    [self searchAutocompleteEntriesWithSubstring:substring];
    return YES;
}
- (void)searchAutocompleteEntriesWithSubstring:(NSString *)substring {

        [_autocompleteFriends removeAllObjects];
        NSString *pattern = [NSString stringWithFormat:@".*\\b%@.*", [NSRegularExpression escapedPatternForString:substring]];
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self MATCHES[c] %@", pattern];
        _autocompleteFriends= [_arrFriendName filteredArrayUsingPredicate:predicate].mutableCopy;
        [_autocompleteTableView reloadData];
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
     return _autocompleteFriends.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{


    UITableViewCell *cell = nil;
    static NSString *AutoCompleteRowIdentifier = @"AutoCompleteRowIdentifier";
    cell = [tableView dequeueReusableCellWithIdentifier:AutoCompleteRowIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc]
                initWithStyle:UITableViewCellStyleDefault reuseIdentifier:AutoCompleteRowIdentifier];
    }

    cell.textLabel.text = [_autocompleteFriends objectAtIndex:indexPath.row];
    return cell;

}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
    _txtName.text = selectedCell.textLabel.text;
    [_autocompleteTableView setHidden:YES];

}

@end

1 个答案:

答案 0 :(得分:1)

你可以通过它的组件将字符串与文本字段分开,所以你的方法可能看起来很糟糕。像这样:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    _autocompleteTableView.hidden = NO;
    NSString *textFromTextfield = [NSString stringWithString:textField.text];
    NSString *substring = [[textFromTextfield componentsSeparatedByString:@","] lastObject];
    substring = [substring stringByReplacingCharactersInRange:range withString:string];
    [self searchAutocompleteEntriesWithSubstring:substring];
    return YES;
}

希望这能让你走上正轨!