如何在 iOS 中为 UISearchBar 设置最近的搜索历史下拉列表
Posted
技术标签:
【中文标题】如何在 iOS 中为 UISearchBar 设置最近的搜索历史下拉列表【英文标题】:How to set a recent search history drop down for UISearchBar in iOS 【发布时间】:2015-10-24 10:04:12 【问题描述】:我想为 UISearchbar
设置最近的搜索历史下拉列表。我已经使用UITableView
以编程方式实现了一个下拉列表
逻辑:
我的实现方式是在UISearchBar
正下方设置一个UITableView
,然后单击UISearchBar
,它将弹出。
我最初将那个 tableview 隐藏在 viewdidload
和
-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
中,我正在取消隐藏 tableview 。
我面临着太多的问题:
1. 当searchbartext
为空时,返回按钮不可用。在这种情况下,如果我必须再次取消/隐藏表格视图,我必须依赖tapgestures
。
2. 再次点击searchbartext
不会触发它的任何代表。它触发代表点击searchbartext
的唯一一次是第一次点击它然后它调用-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
你们还有其他解决方案/方法可以比这更好的方式实现此功能吗?
我们有任何定制的UISearchBar
最近历史下拉列表吗??
我已经在cocoacontrols
、code4app
和cocoapods
中搜索了一个自定义的UISearchBar
最近历史下拉列表,因为没有希望找到任何。
请帮我解决这个问题。
【问题讨论】:
【参考方案1】:对于您的第一个问题,您可以在UISearchBar
上添加一个类似这样的类别,当点击UISearchBar
时,这将始终启用键盘上的return
按钮
@implementation UISearchBar (MyAddition)
- (void)alwaysEnableSearch
// Loop around subviews of UISearchBar
NSMutableSet *viewsToCheck = [NSMutableSet setWithArray:[self subviews]];
while ([viewsToCheck count] > 0)
UIView *searchBarSubview = [viewsToCheck anyObject];
[viewsToCheck addObjectsFromArray:searchBarSubview.subviews];
[viewsToCheck removeObject:searchBarSubview];
if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)])
@try
// Force return key to be enabled
[(UITextField *)searchBarSubview setEnablesReturnKeyAutomatically:NO];
@catch (NSException *iException)
对于第二期,为什么不使用shouldChangeTextInRange:
委托方法,该方法会为每个输入的字符调用。
附带说明,this SO thread 有一个示例代码来执行此操作。这可能会对您有所帮助。
祝你好运!
【讨论】:
谢谢 :) 对于第二个问题,我想解决的方法是当 searchbartextfield 为空并且我第二次单击 searchbartextfield 时要关闭 tableview 。这就是为什么不使用 shouldChangeTextInRange 委托方法的原因。 我明白了。你试过touchesBegan:
方法吗?当你触摸搜索栏时它应该被调用,因为它的超类是UIResponder
。另外,我认为这个答案值得一票:)!
:-) 谢谢。让我知道您是否能够使用touchesBegan:
解决这个问题。如果没有,我很乐意花时间帮助你。【参考方案2】:
根据您最近的说明,我正在重写可能的步骤。
-
保留一个标志/布尔值来监控tableview是否隐藏。
在 UISearchBar Delegate 方法中检查 serachbar 的文本字段的 [obj isFirstResponder] 方法。
一种。如果 firstResponder =yes --> 显示历史表视图或反之亦然。显示/隐藏完成后,在 UISearchBar 的文本字段上调用下面的方法。
*[searchbarobj.textfield resignFirstResponder];*
湾。如果 firstResponder = No---> 什么也不做。离开方法。
【讨论】:
我可以给你解释一下这个场景。假设我单击了 searchbartextfield 它将触发代表,但再次单击 searchbartextfield 不会触发代表。那是我的问题。 您想在点击搜索栏时显示/隐藏表格视图..对吗? 是的。我想用键盘中的返回键实现相同的功能,但遗憾的是,当 UISearchBar 中没有文本输入时,返回键被禁用。以上是关于如何在 iOS 中为 UISearchBar 设置最近的搜索历史下拉列表的主要内容,如果未能解决你的问题,请参考以下文章
iOS之让UISearchBar搜索图标和placeholder靠左显示