隐藏键盘时出现NSString rangeOfString问题

时间:2012-06-07 20:55:47

标签: iphone ios keyboard nsstring uitextfield

我正在实施一个列表,可以使用UITextField中的文字进行过滤,并借助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

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

提前致谢

2 个答案:

答案 0 :(得分:1)

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
按下完成按钮后不会触发

,否则如果强制调用此功能。

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

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

答案 1 :(得分:0)

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

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

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

希望能有所帮助。