我可以将UISearchBar作为自己的.inputAccessoryView吗?

时间:2017-11-14 13:50:32

标签: ios uisearchbar inputaccessoryview

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

self.searchBar.inputAccessoryView = self.searchBar

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

否则我会想到另一种方法。最终,我只想尝试编辑时可以看到的文本输入,并且应该附加到工具栏上。理想情况下使用.inputAccessoryView,所以我不必费心使用键盘通知/动画

有人知道这是否可行?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望使用搜索栏来触发键盘和显示用户输入的搜索词,但不希望总是在屏幕上显示搜索栏但是通过搜索栏激活a"搜索"按钮。

使用单个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()

注意:我在项目中有类似的设置,但为了简单起见,我使用UITextField而不是UISearchBar s;不过,我认为基本方法也适用于UISearchBar