我可以让 UISearchBar 成为它自己的 .inputAccessoryView 吗?

Posted

技术标签:

【中文标题】我可以让 UISearchBar 成为它自己的 .inputAccessoryView 吗?【英文标题】:Can I have a UISearchBar be its own .inputAccessoryView? 【发布时间】:2017-11-14 13:50:31 【问题描述】:

我需要简单的文本输入来帮助过滤数据。理想情况下,我想保持对 UISearchBar 的强烈引用,当用户点击“搜索”时,这个 searchBar 将成为FirstResponder(),我会设置

self.searchBar.inputAccessoryView = self.searchBar

但这似乎不起作用。 .searchBar 通常不在视图控制器的视图层次结构中,我只是希望附加到键盘上。

否则我会考虑另一种方法。最终,我只是想在编辑时看到我可以看到的文本输入,并且应该附加到工具栏上。理想情况下使用 .inputAccessoryView,这样我就不必为键盘通知/动画而烦恼

有谁知道这是否可行?

【问题讨论】:

【参考方案1】:

如果我理解正确,您希望使用搜索栏来触发键盘和显示用户输入的搜索词,但不希望始终在屏幕上显示搜索栏,而是通过以下方式激活它“搜索”按钮。

单个UISearchBar 无法做到这一点,但您可以只使用其中两个:

将一个作为子视图添加到您的视图控制器并将其隐藏(bar1),并将第二个用作inputAccessoryView(bar2);您应该成为两个搜索栏的代表。 当用户按下“搜索”按钮时,让 bar1 成为第一响应者,通过委托协议处理其事件,并相应地更新 bar2。 通过阻止用户在 bar2 中直接输入文本 使用shouldChangeTextIn 委托方法。其他事件 在 bar2 中收到的可以转发到 bar1,这对您来说是有意义的。

为了让您开始,这里有一些基本设置的代码(例如viewDidLoad):

self.dummySearchBar = UISearchBar()
dummySearchBar.isHidden = true
dummySearchBar.delegate = self

self.visibleSearchBar = UISearchBar()
visibleSearchBar.delegate = self
dummySearchBar.inputAccessoryView = visibleSearchBar

然后,在您的“搜索”按钮处理程序中,让带有附加搜索栏的键盘如下所示:

dummySearchBar.becomeFirstResponder()

注意:我在一个项目中有类似的设置,但为简单起见,我使用UITextFields 而不是UISearchBars;不过,我认为基本方法也应该适用于UISearchBars。

【讨论】:

谢谢。我可以编写自己的解决方案,但是当然,无论如何,我认为用户不能使用长按(文本编辑?)无论如何,我现在正在采取另一种方法。感谢您确认我的怀疑。

以上是关于我可以让 UISearchBar 成为它自己的 .inputAccessoryView 吗?的主要内容,如果未能解决你的问题,请参考以下文章

视图加载时使 UISearchBar 成为第一响应者

如何让 iqkeyboardmanager 包含 UISearchBar

让 UISearchBar 像 Music App 一样消失

用 UITableView 实现 UISearchBar

动画 UISearchBar 框架的宽度

移除 UISearchBar 的上下边框和阴影?