字段为空时为 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)的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:仅当输入不为空时才启用保存按钮

如何在布尔属性为空时为其提供默认值

无法检索记录使用jpa库外键时为空

字段为空时不触发远程属性

当textfield为空时禁用按钮等待其他文本字段中的任何更改

当我的搜索字段为空时,如何在不搜索结果的情况下呈现页面,但在搜索时仍然异步呈现?