用 UITextField 自定義UISearchBar 監聽輸入字符串改變的問題



用 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;

}


  

發佈了68 篇原創文章 · 獲贊 10 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章