2011-09-06 52 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