如何限制UISearchBar中的输入?

时间:2013-09-25 16:27:44

标签: ios objective-c uisearchbar

我是Objective C的新手,我的tableView中有搜索栏。我的searchBar文本字段中不需要限制输入,例如我不需要输入超过20个符号,我该怎么做?

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText

我试着像

那样写smth
searchBar.text.lenght == 20;

但是没用[/ p>

我该怎么做?或者在长度> 20时更容易关闭键盘。谢谢。

3 个答案:

答案 0 :(得分:6)

您可以使用shouldChangeCharactersInRange:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
   return ([textField.text length] + [string length] - range.length > 20) ? NO : YES;
}

修改 抱歉。对于UISearchBar,您必须使用

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
   return ([searchBar.text length] + [text length] - range.length > 20) ? NO : YES;
}

修改 见下面的评论

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
   return ([searchBar.text length] + [text length] - range.length <= 20);
}

答案 1 :(得分:2)

扩展另一个答案,因为你是Objective-C的新手

1.您需要在视图控制器中实现UISearchBarDelegate协议。

@interface ViewController : UIViewController <UISearchBarDelegate>

2。您需要分配代理

searchBar.delegate = self

3。实现另一篇文章中指定的委托回调

如果你想要隐藏键盘超过20个字符,你可以通过调用

在同一个委托函数中完成
[searchBar resignFirstResponder];

答案 2 :(得分:1)

对于未来的读者,在Swift 4中:

func searchBar(_ searchBar: UISearchBar, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    let totalCharacters = (searchBar.text?.appending(text).count ?? 0) - range.length
    return totalCharacters <= 20
}