我在UISearchDisplayController
的{{1}}的第一个单元格中添加了UITableView
,并设置了正确的委托回调。一切都很好,除了一个令人讨厌的行为 - 键盘在键入第一个字符后被解雇。键盘解除后,我必须再次触摸UISearchBar以调出键盘并输入第二个及后续字符。
有一个SO link有类似的问题,给出的解决方案是(根据@Hisenberg),不要将Storyboard
添加到该部分。这对我没有帮助,因为我没有将搜索栏添加到tableview的部分。
有没有人见过类似的行为?
更新:根据@Logan评论,将搜索栏移出桌面视图是解决此问题的方法。
如果我在这里输入一个字母,键盘就会被解雇。
答案 0 :(得分:0)
UISearchDisplayController 为您管理搜索功能,但您仍然需要扮演一些角色,因为Apple Docs的这个片段解释了:
" 除了管理可搜索的数据外,原始视图控制器通常还会播放使用搜索显示控制器时需要填充的四个角色。这些角色如下:
搜索结果表视图(searchResultsDataSource)的数据源,它提供结果表的数据。 委托搜索结果表视图(searchResultsDelegate),它响应用户对结果表中项目的选择。 代表搜索显示控制器(委托),它响应搜索的开始或结束等事件,以及搜索界面的显示或隐藏。 为方便起见,也可以告知该代理有关搜索字符串或搜索范围的更改,以便可以重新加载结果表视图。 代表搜索栏(UISearchBar类参考中描述的代理),它响应搜索条件的变化。" UISearchDisplayController
拜托,您能否查看作为 UISearchBarDelegate 的回复情况?
如果您只想在按下搜索按钮后启动搜索并关闭键盘,您就可以实施以下方法:
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
如果您想重新加载搜索结果,并且仅在输入3个字母后才关闭键盘,您可以从UISearchDisplayDelegate实施以下方法:
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString