[英]Enable Search button when searching string is empty in default search bar
在我的应用程序中,我使用默认 IOS 搜索栏的搜索功能,如果我放置一些字符串进行搜索,其工作正常,但在第一次搜索后,我需要显示整个数据源(原始内容)。我的功能是搜索字符串是否为空它将显示整个数据源。 我的问题是,如果我在默认搜索栏中将搜索字符串设为空,搜索按钮会自动进入隐藏状态。 即使字符串为空,我也需要启用搜索按钮。请指导我解决此问题。
谢谢。
其实你可以只设置searchBar.enablesReturnKeyAutomatically = NO;
在 iOS 7+ 上测试
请编写以下代码可能对您有所帮助:)如果您有空字符串,此代码将显示搜索按钮。
- (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;
}
试试吧:) 谢谢:)
斯威夫特 3/iOS 10
for view1 in searchBar.subviews {
for view2 in view1.subviews {
if let searchBarTextField = view2 as? UITextField {
searchBarTextField.enablesReturnKeyAutomatically = false
break
}
}
}
使用以下代码启用没有文本的返回键
UITextField *searchField = nil;
for (UIView *subview in searchBar.subviews) {
if ([subview isKindOfClass:[UITextField class]]) {
searchField = (UITextField *)subview;
break;
}
}
if (searchField) {
searchField.enablesReturnKeyAutomatically = NO;
}
searchBar.enablesReturnKeyAutomatically = NO;
也许是苹果方面的错误?。 由于从 .xib 文件设置 auto-enable return Key 无法按预期工作。
只需添加以下代码:
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
searchBar.enablesReturnKeyAutomatically = NO;
return YES;
}
创建自定义view
并在该view
添加一个button
以移除键盘。 添加该视图时- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
UISearchBar
delegate
方法。 在该按钮上单击退出键盘以及您为该button
创建的view
。 此外,如果您想在该按钮上搜索,那么您也可以这样做。 请查看图片以获得更多说明。
它与接受的答案几乎相同,但如果您使用的是 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;
}
使用它适用于 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;
}
如果您正在寻找更优雅的解决方案,您可以使用递归来查找搜索栏中的文本字段,如下所示。 这应该适用于 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;
}
简单的 Swift 版本:
if let searchTextField:UITextField = searchBar.subviews[0].subviews[2] as? UITextField {
searchTextField.enablesReturnKeyAutomatically = false
}
这是使用 Swift 的解决方案。 只需将其粘贴到您的 viewDidLoad 函数中,并确保您在代码中具有搜索栏的 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
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.