在默认搜索栏中搜索字符串为空时启用搜索按钮

时间:2013-01-11 05:04:10

标签: iphone ios objective-c uisearchbar

在我的应用程序中我使用默认IOS搜索栏的搜索功能,如果我放置一些字符串进行搜索工作正常但在第一次搜索后我需要显示整个数据源(原始内容。)我的功能是,如果搜索字符串为空它将显示整个数据源。我的问题是如果我在默认搜索栏中将搜索字符串设为空,搜索按钮会自动进入隐藏状态。即使字符串为空,我也需要启用搜索按钮。请指导我解决此问题。

enter image description here

感谢。

13 个答案:

答案 0 :(得分:30)

实际上你可以设置在iOS 7 +上测试的searchBar.enablesReturnKeyAutomatically = NO;

答案 1 :(得分:23)

请编写以下代码可能对您有所帮助:)如果您有空字符串,此代码会显示搜索按钮

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 
{
    [self.searchBar setShowsCancelButton:YES animated:YES];
    self.tblView.allowsSelection = NO;
    self.tblView.scrollEnabled = NO;

    UITextField *searchBarTextField = nil;
    for (UIView *subview in self.searchBar.subviews)
    {
        if ([subview isKindOfClass:[UITextField class]])
        {
            searchBarTextField = (UITextField *)subview;
            break;
        }
    }
    searchBarTextField.enablesReturnKeyAutomatically = NO;
}

试试吧:)谢谢:)

答案 2 :(得分:2)

使用以下代码启用没有文字的返回键

  UITextField *searchField = nil;
  for (UIView *subview in searchBar.subviews) {
    if ([subview isKindOfClass:[UITextField class]]) {
      searchField = (UITextField *)subview;
      break;
    }
  }

  if (searchField) {
    searchField.enablesReturnKeyAutomatically = NO;
  }

答案 3 :(得分:2)

Swift 3 / iOS 10

for view1 in searchBar.subviews {
        for view2 in view1.subviews {
            if let searchBarTextField = view2 as? UITextField {
                searchBarTextField.enablesReturnKeyAutomatically = false
                break
            }
        }
    }

答案 4 :(得分:2)

searchBar.enablesReturnKeyAutomatically = NO;

答案 5 :(得分:1)

创建自定义view&在view上添加一个button以删除键盘。在- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar的{​​{1}} delegate方法时添加该视图。 在该按钮上,单击以退出键盘以及为UISearchBar创建的view。此外,如果您想要搜索该按钮,那么您也可以执行此操作。 请参阅图片以获得更多说明。

enter image description here

答案 6 :(得分:1)

它与接受的答案几乎相同,但如果您使用iOS 7,由于搜索栏中的某些更改,您将需要额外的for循环

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 
{
    [self.searchBar setShowsCancelButton:YES animated:YES];
    UITextField *searchBarTextField = nil;
    for (UIView *mainview in self.searchBar.subviews)
    {
        for (UIView *subview in mainview.subviews) {
            if ([subview isKindOfClass:[UITextField class]])
            {
                searchBarTextField = (UITextField *)subview;
                break;
            }

        }  
    }
    searchBarTextField.enablesReturnKeyAutomatically = NO;
}

答案 7 :(得分:1)

使用它适用于ios 6和7:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)search
{
    UITextField *searchBarTextField = nil;
    for (UIView *mainview in search.subviews) {
        if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
            if ([mainview isKindOfClass:[UITextField class]]) {
                searchBarTextField = (UITextField *)mainview;
                break;
            }
        }
        for (UIView *subview in mainview.subviews) {
            if ([subview isKindOfClass:[UITextField class]]) {
                searchBarTextField = (UITextField *)subview;
                break;
            }
        }
    }
    searchBarTextField.enablesReturnKeyAutomatically = NO;
}

答案 8 :(得分:1)

如果您正在寻找更优雅的解决方案,您可以使用递归来查找搜索栏中的文本字段,如下所示。这适用于ios 6,7或任何其他未来的ios,除非苹果公司对此进行任何弃用。

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
    UITextField* textField = [self findTextFieldInView:searchBar];
    if (textField) {
        textField.enablesReturnKeyAutomatically = NO;
    }
}

-(UITextField*)findTextFieldInView:(UIView*)view {
    if ([view isKindOfClass:[UITextField class]]) {
        return (UITextField*)view;
    }
    for (UIView* subview in view.subviews) {
        UITextField* textField = [self findTextFieldInView:subview];
        if (textField) {
            return textField;
        }
    }
    return nil;
}

答案 9 :(得分:1)

也许是苹果方面的错误?由于.xib文件设置自动启用返回键无法按预期工作。

只需添加以下代码:

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
    searchBar.enablesReturnKeyAutomatically = NO;

    return YES;
}

答案 10 :(得分:0)

这是使用Swift的解决方案。只需将其粘贴到viewDidLoad函数中,并确保代码中有searchBar的IBOutlet。 (在我下面的例子中,inputSearchBar变量是IBOutlet)

   // making the search button available when the search text is empty
    var searchBarTextField : UITextField!
    for view1 in inputSearchBar.subviews {
        for view2 in view1.subviews {
            if view2.isKindOfClass(UITextField) {
                searchBarTextField = view2 as UITextField
                searchBarTextField.enablesReturnKeyAutomatically = false
                break
            }
        }
    }

答案 11 :(得分:0)

简单的Swift版本:

if let searchTextField:UITextField = searchBar.subviews[0].subviews[2] as? UITextField {
                searchTextField.enablesReturnKeyAutomatically = false
}

答案 12 :(得分:0)

快速使用 UISearchBarDelegate

func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
    searchBar.enablesReturnKeyAutomatically = false  
}`

enter image description here