字段为空时为 UISearchBar 启用“搜索”按钮? (IOS 7)
Posted
技术标签:
【中文标题】字段为空时为 UISearchBar 启用“搜索”按钮? (IOS 7)【英文标题】:Enable 'search' button for UISearchBar when field is empty? (iOS 7) 【发布时间】:2013-10-23 01:26:46 【问题描述】:在 ios 7 中,当用户清除以前在 UISearchBar 中的文本时,蓝色的“搜索”按钮会被禁用。有什么办法可以改变它,所以它总是启用的?我希望用户即使在没有文本的情况下也能够点击“搜索”,以显示列表中的所有项目,而不是按搜索词过滤它。 (目前,当用户尝试清除以前的搜索词时,蓝色的“搜索”按钮会被禁用。)
我可以在我的委托的 searchBarTextDidEndEditing 回调中触发一个新的搜索,以便 关闭键盘 按钮会导致一个包含所有结果的刷新列表...但理想情况下,我希望蓝色的搜索按钮是即使字段中没有文本也可用。这可能吗?
【问题讨论】:
【参考方案1】: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;
【讨论】:
它确实有效,但似乎 searchDisplayController 由于某种原因没有显示单元格。 对于 searchDisplayController,我必须添加这个 ***.com/a/16771901/1537178【参考方案2】:在快速浏览标题之后,看起来您想要完成的不是他们想要使用 UISearchBar 的内容。要准确获得您想要的内容,您可能需要使用没有所有搜索修饰的普通文本字段。
也就是说,我有一个最有效的 hack。它在不使用时用虚拟字符串填充搜索栏。当您输入第一个字符时,搜索按钮会在瞬间被禁用。但在大多数情况下,它会得到你想要的:
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
【讨论】:
以上是关于字段为空时为 UISearchBar 启用“搜索”按钮? (IOS 7)的主要内容,如果未能解决你的问题,请参考以下文章