在iOS 7中,当用户以前在UISearchBar中清除文本时,蓝色的“搜索”按钮将被禁用。有没有办法改变它,所以它总是启用?我希望用户能够在没有文本的情况下点击“搜索”,以显示列表中的所有项目,而不是按搜索词进行过滤。 (目前,当用户尝试清除以前的搜索词时,蓝色的“搜索”按钮将被禁用。)
我可以在我的委托的searchBarTextDidEndEditing回调中触发一个新搜索,这样 Dismiss键盘按钮会生成一个包含所有结果的刷新列表...但理想情况下我希望蓝色搜索按钮是即使字段中没有文本也可用。这可能吗?
答案 0 :(得分:9)
Apple改变了iOS 7中的UISearchBar
结构。我找到了适用于iOS 7和之前iOS版本的组合解决方案。
- (void)searchBarTextDidBeginEditing:(UISearchBar *) bar
{
UITextField *searchBarTextField = nil;
NSArray *views = ([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0f) ? bar.subviews : [[bar.subviews objectAtIndex:0] subviews];
for (UIView *subview in views)
{
if ([subview isKindOfClass:[UITextField class]])
{
searchBarTextField = (UITextField *)subview;
break;
}
}
searchBarTextField.enablesReturnKeyAutomatically = NO;
}
答案 1 :(得分:0)
快速查看标题后,看起来你想要完成的不是他们想要使用的UISearchBar。要获得您想要的内容,您可能需要使用普通文本字段而不需要所有搜索修剪。
那就是说,我有一个大部分都有效的黑客。它在不使用时用虚拟字符串填充搜索栏。当您输入第一个字符时,会有一秒钟,其中搜索按钮被禁用。但在大多数情况下,它会得到你想要的东西:
NSString *kDummyString = @" ";
@implementation CDViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.searchBar.searchBarStyle = UISearchBarStyleMinimal;
self.searchBar.text = kDummyString;
}
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if (searchText.length < 1) {
searchBar.text = kDummyString;
}
}
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
BOOL isPreviousTextDummyString = [searchBar.text isEqualToString:kDummyString];
BOOL isNewTextDummyString = [text isEqualToString:kDummyString];
if (isPreviousTextDummyString && !isNewTextDummyString && text.length > 0) {
searchBar.text = @"";
}
return YES;
}
@end