#define kSilentTag 0
#define kViolentTag 1
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
NSString *newString = [searchBar.text stringByReplacingCharactersInRange:range withString:text];
if ([newString length] >= 3) {
if(searchBar.tag == kSilentTag) {
searchBar.tag = kViolentTag;
[NSRunLoop cancelPreviousPerformRequestsWithTarget:self selector:@selector(searchBarSearchButtonClicked:) object:searchBar];
[self performSelector:@selector(searchBarSearchButtonClicked:) withObject:searchBar afterDelay:3.0];
}
}else{
searchBar.tag = kSilentTag;
}
return YES;
}
好吧,这是这个答案的最后更新,我不喜欢BOOL
s 所以我做了一个定义标签来实现这个,kSilentTag
应该是任何东西,但不匹配kViolentTag
,也应该是你的默认标签UISearchBar
。
重要的是,在任何时候,如果您要重置搜索栏(意味着清空它),只需确保将其标签更改为kSilentTag
back。
建议,你已经设置了 3.0 的时间间隔来执行选择器,你应该把它设置得少一些(可能是 1.0),因为,用户肯定会感觉到发生了什么!(就像我们之前在 WindowsXP PC 上的感觉)?^_^