当我尝试传递第二个字符时,BEGINWITH谓词不起作用

时间:2015-10-22 06:07:19

标签: ios objective-c uitextfield nsarray nspredicate

我正在尝试为textfield提出建议。以下是我的代码

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSLog(@"String output: %@", string);
    NSString *stringToSearch = string;

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH %@",stringToSearch]; // if you need case sensitive search avoid '[c]' in the predicate

    // NSLog(@"Predicate has some ?: %i", [predicate ])
    selectedOne = [colorAutocompleteArray filteredArrayUsingPredicate:predicate];


    NSLog(@"count of selected: %lu",(unsigned long)[selectedOne count]);

    NSLog(@"Select Array: %@", selectedOne);

    NSLog(@"Text entered: %@", textField.text);

    tableView.hidden = NO;
    [tableView reloadData];


    return true;

}

当我输入第一个字母表时,它可以正常工作,但只要我输入第二个字母,它就不会返回任何内容。然而,我尝试使用'包含'关键字它工作正常,但建议列表是大的,因为它检查包含任何字母的数组的每个entery。所以我想要类似于hasPrefix方法,所以我尝试了这个,但它永远不会在多个条目上返回任何东西。您的每一个评论将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:0)

问题是此方法一次返回一个字符而不是您输入的所有字符。

NSLog(@"String output: %@", string);
NSString *stringToSearch = string;

选中此项并获取整个textField字符串。

希望这会对你有帮助。

答案 1 :(得分:0)

试试这个

NSString *stringToSearch = [textField.text stringByAppendingString:string];

因为“字符串”仅返回您输入的最后一个字符,因此之间的不起作用