2016-03-15 46 views
0

我有一些名稱的數組。當我打字時,我創建了一個表格,並顯示一個包含可能數據的自動完成表格。一旦我選擇它出現在文本框中。 實際問題:我想要做的是,如果在選擇第一個建議後,我開始打字並插入一個「,」並開始再次輸入,我也需要自動完成功能。到目前爲止,我已經設法讓它只能用於初始文本。如何在文本框中執行多個自動完成功能?

- (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 
+2

也許你可以將NSString分隔成一個由逗號分隔的數組,並將它的最後一個Object用於自動完成:'[[searchString componentsSeparatedByString:@「,」] lastObject];' – 3vangelos

+0

請你詳細說明一下。 @ 3vangelos –

回答

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; 
} 

希望這能讓你走上正軌!

相關問題