0

我正在实现一个列表,该列表可以在 aUITextField的帮助下使用 a 中的文本进行过滤UITextFieldDelegate

代码如下:

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

    _tempWrittenText = [textField.text stringByReplacingCharactersInRange: range withString: string];
    [self filterCountries];

    return YES;
}

/** Filter the countries with the currently typed text */
- (void) filterCountries {
    if (_tempWrittenText.length == 0) {
        _visibleCountriesList = (NSMutableArray*) _countriesList;
        [tableMedals reloadSections: [NSIndexSet indexSetWithIndex: 0] withRowAnimation: UITableViewRowAnimationNone];

    } else {
        _visibleCountriesList = [NSMutableArray array];

        for (Country* c in _countriesList) {
            if ([c.name rangeOfString: _tempWrittenText].location != NSNotFound) {
                [_visibleCountriesList addObject: c];
            }
        }
        [tableMedals reloadSections: [NSIndexSet indexSetWithIndex: 0] withRowAnimation: UITableViewRowAnimationFade];
    }

}

输入文字时,过滤器可以完美运行;但是,当按下DONE键盘键(隐藏键盘)- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string时也会触发该方法,这会奇怪地擦除所有项目而不是保持原样。

问题是该rangeOfString部分总是返回 NSNotFound。我不明白为什么,如果我记录两个字符串是正确的变量。

例如: [@"Angola" rangeOfString @"A"].location 会给NSNotFound

我再说一遍,这只发生在键盘被隐藏时。有人有想法吗?

提前致谢

4

2 回答 2

1

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

按下完成按钮时不会触发,否则如果您强制调用此函数。

使用它隐藏键盘,这不会触发上述方法。

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}
于 2012-06-07T21:16:33.770 回答
0

好吧,我刚刚发现按下完成键时系统会添加一个换行符。我不知道这是默认行为或为什么会这样做。

防止这种情况的方法是添加以下内容:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    return YES;
}

希望对某人有所帮助。

于 2012-06-07T21:40:59.297 回答