2011-09-06 51 views
1

我有一個UISearchBar,我在我的viewDidLoad實現:通過代碼。 我也設置了UISearchBarDelegate實現UISearchBar委託方法後鍵盤沒有響應

現在我想進入超過5 chracter限制用戶所以我實現這個委託方法

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 

    NSLog(@"shouldChangeTextInRange"); 

    if (searchBar.text.length >= 5) 
     return NO; 

    return YES; 
} 

其工作的罰款。

問題是當我輸入5個字符&嘗試使用鍵盤退格字符,它不工作。

現在,如果我按下鍵盤搜索按鈕searchBarSearchButtonClicked:沒有被調用。

我目前使用

的XCode版本:3.2.5

的iOS SDK:4.2

回答

2

你應該做你的測試上文本長度(時長的文字,你將會有如果應用建議的文本更改),不是的實際文本長度。

對於這一點,首先需要計算新的案文:

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    if ([text isEqualToString:@"\n"]) 
     return YES; // accept validation button 

    NSString* newText = [searchBar.text stringByReplacingCharactersInRange:range withString:text]; 

    if (newText.length >= 5) 
     return NO; 

    return YES; 
} 
+0

但是爲什麼searchBarSearchButtonClicked:在我到達結尾字符時沒有被調用? – user930195

+0

如果你不實現'''searchBar:shouldChangeTextInRange:'''是否正確調用?無論如何,你可能還需要'''返回YES'''如果([text isEqualToString:@「\ n」])''''。 – AliSoftware

+0

是的,如果我不實施shouldChangeTextInRange: – user930195

0

不能使用的,因爲你的代碼退格。輸入5個字符後,您的searchBar卡住了。用它代替:

if ([textField.text length] + [string length] - range.length > 5) { 
     return NO; 
    } 
+0

AliSoftware的回答也不錯:) – Zoleas

+0

但是爲什麼searchBarSearchButtonClicked:在我到達結尾字符時沒有被調用? – user930195