我正在实现一个列表,该列表可以在 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
我再说一遍,这只发生在键盘被隐藏时。有人有想法吗?
提前致谢