用 UITextField 自定義的 UISearchBar 沒有如下的 UISearchBar 中的協議方法
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
UITextField 中只有協議方法:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
該方法只能監聽將要改變之前的狀態,不能監聽當前 textfield 的字符串,監聽的字符串總是慢一步。如果將要輸入中文,則監聽到的是中文拼音,並且拼音中間以空格隔開,textField.text.length長度爲英文字母加空格個數。
解決辦法:
UITextFieldTextDidChangeNotification
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(textChanged)
name:UITextFieldTextDidChangeNotification
object:_searchTF];
-(void)textChanged
{
BOOL isEqual = [_searchTF.text isEqualToString:_oldStr];
if ( isEqual || ((!isEqual) && (_oldStr.length > _searchTF.text.length))) {
NSLog(@"===////%@====////=====",_searchTF.text);
}
_oldStr = _searchTF.text;
}
//或者
-(void)textChanged
{
if ([_searchTF.text isEqualToString:_oldStr]) {
NSLog(@"===////%@====////=====",_searchTF.text);
}
if ((![_searchTF.text isEqualToString:_oldStr])&&(_oldStr.length > _searchTF.text.length)) {
NSLog(@"===////%@====////=====",_searchTF.text);
}
_oldStr = _searchTF.text;
}
更正:
-(void)textChanged
{
if ([_searchTF.text isEqualToString:_changeStr]) {
// [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
// [_doctorsArray removeAllObjects];
// [self loadDoctorWithKeyword:_searchTF.text AndIsSearchType:YES AndPage:1];
_oldStr = _searchTF.text;
NSLog(@"===////%@====////=====",_searchTF.text);
}else if ((![_searchTF.text isEqualToString:_oldStr])&&(_oldStr.length > _searchTF.text.length)) {
// [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
// [_doctorsArray removeAllObjects];
// [self loadDoctorWithKeyword:_searchTF.text AndIsSearchType:YES AndPage:1];
_oldStr = _searchTF.text;
NSLog(@"===////%@====////=====",_searchTF.text);
}
_changeStr = _searchTF.text;
}
-(void)textChanged
{
BOOL isEqual = [_searchTF.text isEqualToString:_changeStr];
if ( isEqual || ((!isEqual) && (_oldStr.length > _searchTF.text.length))) {
_oldStr = _searchTF.text;
NSLog(@"===////%@====////=====",_searchTF.text);
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
[_doctorsArray removeAllObjects];
[self loadDoctorWithKeyword:_searchTF.text AndIsSearchType:YES AndPage:1];
}
_changeStr = _searchTF.text;
}