【问题标题】:How can I programmatically force a search in the UISearchBar?如何以编程方式强制在 UISearchBar 中进行搜索?
【发布时间】:2012-09-16 14:13:39
【问题描述】:

如何强制 UISearchBar 自动开始新的搜索(例如按下搜索按钮)?有没有简单的方法来实现这一点?

【问题讨论】:

  • 没有重复,因为我们不想显示键盘,我们希望像单击搜索按钮时那样开始搜索过程。问题是逻辑在我们无权访问的库中(没有源代码)
  • 哦,我明白了,这是有道理的。你应该把这些信息放在问题中。 ;)
  • 类似问题here
  • 这是自动化测试的一部分吗?或者这是您真正希望在您的应用上出现的行为?
  • 也有问题。

标签: objective-c ios cocoa-touch uisearchbar


【解决方案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")
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-03-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多