首先需要感谢一下cocoaChina里的一个小伙伴的demo
先下载demo再看内容,会比较爽SearchDemo
UISearchController
ios 8 以后,我们可以用UISearchController来代替UISearchBar + UISearchDisplayController的组合。实不相瞒,鄙人一直没能找到正确的使用UISearchController的姿势,但是又垂涎UISearchController搜索的动效,因此,有必要从根本上来正是这个问题,否则怎么优雅的实现炫酷的搜索效果呢。
最最重要的是,首先你必须正确的使用它,然后才能定制化开发,一开始就用的有问题了,后面再开发起来,会很麻烦。要么弃用,要么要用很多代码才能搞定。
几个重要的属性
hidesNavigationBarDuringPresentation:搜索时,是否隐藏导航栏,默认为true
dimsBackgroundDuringPresentation:搜索时,是否显示灰色透明蒙版,且此蒙版可以点击取消搜索,默认为true
obscuresBackgroundDuringPresentation:搜索时,是否时背景模糊,默认为true(这个属性我设置了为false貌似没啥鸟用,可能需要在osTV上才有效果吧)searchResultsController:展示搜索结果的控制器
searchBar:搜索栏控件
isActive:是否时活动状态
两个重要的代理
UISearchResultsUpdating:搜索栏实时响应的代理方法,在这里进行正式的搜索工作UISearchControllerDelegate:searchController出现、消失的代理方法,你可以在这里进行相应的处理
需要注意的点
1.UISearchController必须是viewcontrller的属性,否则不触发其UISearchControllerDelegate和UISearchResultsUpdating的代理方法,也就没法搜索了。
2.UISearchController的searchBar的取消按钮,默认是英文的,有同学通过网上的办法把它设置为中文。提供另一个思路,在info.plist里键入Localizations,这是个数组,搞俩元素,分别为english和chinese(simplified),这么处理才对,让app根据手机的语言环境自动处理。
3.这里是真的要注意了,一定要设置searchController的父控制器的definesPresentationContext属性为true,表示UISearchController在present时,可以覆盖当前controller。如果不设置,searchResultController的搜索栏会看不见或有其他的一些问题。
我的疑问,求大神解答
由于ios 11的navigationItem默认就有searchBar属性,所以,在ios11 中searchController没有任何毛病,但是在ios11 之前的版本里面,searchController还是会有一些问题,如取消搜索时,恢复动画会有点毛病,同时searchResultController的第一行cell没有紧挨着searchBar,这个问题很棘手,我就想从searchController的角度来解决。知道处理的同学,请留言。