我有一个带有一些名字的数组。当我明星打字我创建了一个表,我显示了一个包含可能数据的自动完成表。一旦我选择它出现在文本字段中。 实际问题:我想要做的是,如果在选择了第一个建议后我开始进一步输入并插入“,”并再次开始输入我需要自动完成功能。到目前为止,我已经设法让它只用于初始文本。
- (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
答案 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;
}
希望这能让你走上正轨!