前言
iOS8开始,苹果引入了新的UISearchController替代UISearchDisplayController。iOS7已经废弃一段时间了,所以研究了下UISearchController的使用,替换了目前项目中的一个搜索模块,UISearchDisplayController的使用不再赘述,直接讲解UISearchController。
1.UISearchController简介
一个UISearchController对象通过与UISearchBar交互管理搜索结果的展示。当你有一个包含可搜索内容的VC,把UISearchController对象的searchBar嵌入到当前VC的布局中,当用户与searchBar交互时,UISearchController自动展示你自定义的searchResultsController。
2.原理
一个UISearchController(SVC)需要两个自定义的VC:第一个VC1展示可搜索的内容,第二个VC2展示搜索的结果。VC1通常是push或present出来的界面,VC2负责展示搜索的结果,当使用initWithSearchResultsController初始化一个SVC时,把VC2当做参数传入,SVC会在适当的时候展示VC2。
每一个SVC都包含一个searchBar对象,必须把searchBar嵌入到VC1的布局中,当用户点击searchBar时,SVC会自动展示VC2。
当用户在searchBar输入时,SVC会通知遵循searchResultsUpdater协议的对象(一般是VC1或者VC2),通过searchResultsUpdater对应的方法就可以进行搜索,并将搜索的结果展示到VC2中。
如果想要自定义VC2的presentation或者dismissal,可以让一个对象遵循的SVC的delegate,delegate有5个方法,分别对应VC2的5个状态。
尽管UISearchController是一个VC,但不要直接present,如果非要present,把UISearchController包装进UISearchContainerViewController,然后present UISearchContainerViewController。
3.实例
3.1 场景
从首页进入搜索用户界面(VC1),VC1会展示搜索框和推荐的用户,点击搜索框展现VC2,编辑搜索框会将搜索结果展现在VC2上。VC截图如下:
3.2 VC1中实例化UISearchController和VC2
创建@property:
viewDidLoad中实例化对象:
3.3 VC2中实例化SVC的代理
创建@property:
代理方法:
4.手机截图
5.结语
UISearchController介绍就到这里。