博客> UISearchController踩坑记
UISearchController踩坑记
2017-12-14 13:50 评论:0 阅读:1419 早起的虫子被鸟吃
搜索

首先需要感谢一下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的属性,否则不触发其UISearchControllerDelegateUISearchResultsUpdating的代理方法,也就没法搜索了。

2.UISearchController的searchBar的取消按钮,默认是英文的,有同学通过网上的办法把它设置为中文。提供另一个思路,在info.plist里键入Localizations,这是个数组,搞俩元素,分别为englishchinese(simplified),这么处理才对,让app根据手机的语言环境自动处理。

3.这里是真的要注意了,一定要设置searchController的父控制器的definesPresentationContext属性为true,表示UISearchController在present时,可以覆盖当前controller。如果不设置,searchResultController的搜索栏会看不见或有其他的一些问题。

我的疑问,求大神解答

由于ios 11的navigationItem默认就有searchBar属性,所以,在ios11 中searchController没有任何毛病,但是在ios11 之前的版本里面,searchController还是会有一些问题,如取消搜索时,恢复动画会有点毛病,同时searchResultController的第一行cell没有紧挨着searchBar,这个问题很棘手,我就想从searchController的角度来解决。知道处理的同学,请留言。

收藏
3
sina weixin mail 回到顶部