Objective c 如何以编程方式强制在UISearchBar中进行搜索?

Objective c 如何以编程方式强制在UISearchBar中进行搜索?,objective-c,ios,cocoa-touch,uisearchbar,Objective C,Ios,Cocoa Touch,Uisearchbar,如何强制UISearchBar自动启动新搜索(如按下搜索按钮)?有没有一种简单的方法可以实现这一点?是的,您只需在UISearchbarDelegate上隐式调用SearchBarSearchButton,点击:。有关此代理的更多信息,请查看 只需让搜索输入字段成为第一响应者: [self.searchInputField becomeFirstResponder]; 我发现我需要先将UISearchViewController设置为活动状态,然后再通过编程更改搜索字段的值,以使UISearc

如何强制UISearchBar自动启动新搜索(如按下搜索按钮)?有没有一种简单的方法可以实现这一点?

是的,您只需在
UISearchbarDelegate
上隐式调用
SearchBarSearchButton,点击:
。有关此代理的更多信息,请查看

只需让搜索输入字段成为第一响应者:

[self.searchInputField becomeFirstResponder];

我发现我需要先将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";
Swift 4

self.searchController.isActive = true
self.searchController.searchBar.text = "New search string"

看起来很傻,但很管用,所以不傻;)


你可以强制你的搜索栏

目标C:

[self searchBar:yourSearchBarName textDidChange: yourSearchingString];
Swift 3.0:

self.searchBar(self.yourSearchBarName, textDidChange: yourSearchingString)

这将触发您的搜索栏。

在确保所需文本位于搜索栏内后,您可以调用self.searchBarSearchButtonClicked(搜索栏)(传入搜索栏)假设您已经实现了此UISearchBarDeleteGate方法
searchBarSearchButtonClicked(\uSearchBar:UISearchBar)

这起作用-Swift 4

   searchBar.text="Amber"
   self.searchBar(self.searchBar, textDidChange: "Amber")

可能重复无重复由于我们不想显示键盘,我们希望启动搜索过程,就像单击搜索按钮一样。问题是逻辑在一个我们无法访问(没有源代码)的库中。哦,我明白了,这是有道理的。那么你应该把这些信息放在问题中类似的问题是,这是自动化测试的一部分吗?或者这是你在你的应用程序上真正想要的行为?谢谢你的回复,我们确实有一个问题,搜索栏嵌入在我们无法访问的视图中,因此这种方法不起作用。您还有其他提示吗?但是在您的代码中的某个地方,您应该有一个委托类来处理搜索-不是吗?我们没有权限访问该部分代码,因为它是在我们无法访问源代码的库中实现的。我们正在试图找到在那里使用的代理,但到目前为止我们没有成功。谁来处理搜索-你还是你的库?库,这就是问题谢谢你的回答,在这种情况下,self是什么?当我知道如何访问搜索栏的文本字段时,这是因为FirstResponder只显示键盘,但我们确实希望自动启动搜索。哦,我通常创建自己的searchInputField句柄,正如@tiguero在搜索栏中所说的,或者只是自己初始化它。如果你不能访问输入字段,那么它会更复杂。我们确实找到了一些解决方法。我们只需使用库启动两次搜索,并在第一次搜索返回任何内容之前取消第一次搜索,我们就可以随心所欲地获得所有内容。这有点糟糕,但它的工作原理和预期的一样--这很好地工作了,并且修复了我遇到的许多其他问题,例如某些委托方法没有被触发。谢谢。值得注意的是,这个顺序很重要:)我们如何使用从故事板创建的搜索栏来做到这一点?
   searchBar.text="Amber"
   self.searchBar(self.searchBar, textDidChange: "Amber")
let searchBar: UISearchBar = /* The Searchbar */
searchBar.delegate?.searchBar?(searchBar, textDidChange: "")
searchBar.text = ""