如何以编程方式强制在 UISearchBar 中进行搜索?
Posted
技术标签:
【中文标题】如何以编程方式强制在 UISearchBar 中进行搜索?【英文标题】:How can I programmatically force a search in the UISearchBar? 【发布时间】:2012-09-16 14:13:39 【问题描述】:如何强制 UISearchBar 自动开始新的搜索(例如按下搜索按钮)?有没有简单的方法来实现这一点?
【问题讨论】:
没有重复,因为我们不想显示键盘,我们希望像单击搜索按钮时那样开始搜索过程。问题是逻辑在我们无权访问的库中(没有源代码) 哦,我明白了,这是有道理的。你应该把这些信息放在问题中。 ;) 类似问题here 这是自动化测试的一部分吗?或者这是您真正希望在您的应用上出现的行为? 也有问题。 【参考方案1】:我发现在以编程方式更改搜索字段的值之前,我需要将 UISearchViewController 设置为活动状态,以使 UISearchViewController 自动执行搜索:
// Need to set the searchDisplayController to active to
// make the changes in search text trigger a search.
self.searchDisplayController.active = YES;
self.searchDisplayController.searchBar.text = @"New search string";
斯威夫特 4
self.searchController.isActive = true
self.searchController.searchBar.text = "New search string"
【讨论】:
这很好用,并解决了我遇到的许多其他问题,例如某些委托方法没有被触发。谢谢。 值得注意的是,顺序很重要:) 我们如何使用从故事板创建的搜索栏来做到这一点?【参考方案2】:只需让搜索输入字段成为第一响应者:
[self.searchInputField becomeFirstResponder];
【讨论】:
感谢回复,这里的 self 是什么? 当我弄清楚我们如何访问搜索栏的文本字段时,这个 becomeFirstResponder 只显示键盘,但我们确实想自动开始搜索 哦,我通常创建自己的 searchInputField 句柄,正如@tiguero 从搜索栏中所说的那样,或者只是自己初始化它。如果您无权访问输入字段,那么它会更复杂。 我们确实找到了某种解决方法。我们只是使用库开始搜索两次,并在第一次搜索返回之前取消第一次搜索,然后我们就拥有了我们喜欢的一切。这有点糟糕,但它按预期工作-.-【参考方案3】:你可以强制你的searchBar,
目标 C:
[self searchBar:yourSearchBarName textDidChange: yourSearchingString];
Swift 3.0:
self.searchBar(self.yourSearchBarName, textDidChange: yourSearchingString)
这将触发您的搜索栏。
【讨论】:
【参考方案4】:在确保你想要的文本在你的搜索栏中之后,你可以调用self.searchBarSearchButtonClicked(searchBar)
(在你的搜索栏中传递)假设你已经实现了这个 UISearchBarDelegate 方法searchBarSearchButtonClicked(_ searchBar: UISearchBar)
【讨论】:
对我来说,这是最好的选择,也是因为它可读性很强【参考方案5】:let searchBar: UISearchBar = /* The Searchbar */
searchBar.delegate?.searchBar?(searchBar, textDidChange: "")
searchBar.text = ""
【讨论】:
【参考方案6】:是的,您只需隐式调用您的UISearchbarDelegate
上的searchBarSearchButtonClicked:
。查看official doc 了解有关此代表的更多信息。
【讨论】:
感谢您的回复,我们确实遇到了 searchBar 嵌入在我们无法访问的视图中的问题,因此这种方法不起作用。您还有其他提示吗? 但是在你的代码中的某个地方你应该有一个委托类来处理搜索 - 不是吗? 我们无权访问那部分代码,因为它是在我们使用的库中实现的,我们无法访问源代码。我们正在尝试找到在那里使用的委托,但到目前为止我们还没有成功。 谁来处理搜索——你还是你的图书馆? 图书馆,这就是问题所在【参考方案7】:看起来很笨,但很有效,所以它不笨;)
NSString * forceReload = self.searchDisplayController.searchBar.text;
self.searchDisplayController.searchBar.text = forceReload;
【讨论】:
【参考方案8】:斯威夫特 5
如果你只有一个 UISearchBar(不是 UISearchViewController):
let searchBar: UISearchBar
searchBar.text = "foo" // Reset the search text
searchBar.becomeFirstResponder() // Select the field and bring up the keyboard
【讨论】:
【参考方案9】:这行得通 - Swift 4
searchBar.text="Amber"
self.searchBar(self.searchBar, textDidChange: "Amber")
【讨论】:
以上是关于如何以编程方式强制在 UISearchBar 中进行搜索?的主要内容,如果未能解决你的问题,请参考以下文章
RxSwift - 在 UISearchBar 中以编程方式触发搜索
以编程方式将 UISearchBar 添加到 UITableView 不起作用
以编程方式为 UITableView 和 UISearchBar 设置 NSLayoutConstraints
以编程方式将 UISearchBar 添加到普通 ViewController 中以编程方式添加的 UITableView