2013-10-23 61 views
3

在iOS 7中,当用户以前在UISearchBar中清除文本时,蓝色的“搜索”按钮将被禁用。有什么方法可以改变它,所以它总是启用?我希望用户即使在没有文字的情况下也能点击“搜索”,以显示列表中的所有项目,而不是通过搜索词条进行过滤。 (目前,当用户试图清除以前的搜索词,蓝色的搜索按钮被禁用。)当字段为空时,为UISearchBar启用“搜索”按钮? (iOS 7)

我可能触发我委托的searchBarTextDidEndEditing回调一个新的搜索,使关闭键盘按钮导致刷新列表所有结果......但理想情况下,我希望蓝色的搜索按钮即使在该字段中没有文本时也可用。这可能吗?

回答

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 
9

苹果在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; 
} 
+0

它确实有效,但似乎searchDisplayController由于某种原因不显示单元格。 –

+0

for searchDisplayController,我要添加这个http://stackoverflow.com/a/16771901/1537178 –

相关问题