1

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

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

我试着写

searchBar.text.lenght == 20;

但这没用

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

4

3 回答 3

10

你可以使用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);
}
于 2013-09-25T16:32:27.197 回答
4

对于未来的读者,在 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
}
于 2017-11-17T15:52:12.120 回答
2

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

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

@interface ViewController : UIViewController <UISearchBarDelegate>

2. 您需要分配委托人

searchBar.delegate = self

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

如果你想在超过 20 个字符时隐藏键盘,你可以在同一个委托函数中通过调用

[searchBar resignFirstResponder];
于 2013-09-25T16:42:43.863 回答