当字段为空时,为UISearchBar启用“搜索”按钮? (IOS 7)

时间:2013-10-23 01:26:47

标签: ios ios7 uisearchbar

在iOS 7中,当用户以前在UISearchBar中清除文本时,蓝色的“搜索”按钮将被禁用。有没有办法改变它,所以它总是启用?我希望用户能够在没有文本的情况下点击“搜索”,以显示列表中的所有项目,而不是按搜索词进行过滤。 (目前,当用户尝试清除以前的搜索词时,蓝色的“搜索”按钮将被禁用。)

我可以在我的委托的searchBarTextDidEndEditing回调中触发一个新搜索,这样 Dismiss键盘按钮会生成一个包含所有结果的刷新列表...但理想情况下我希望蓝色搜索按钮是即使字段中没有文本也可用。这可能吗?

2 个答案:

答案 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