美文网首页
UISearchController踩坑记

UISearchController踩坑记

作者: 真爱要有你才完美 | 来源:发表于2017-10-03 21:01 被阅读234次

    首先需要感谢一下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的角度来解决。知道处理的同学,请留言。

    相关文章

      网友评论

          本文标题:UISearchController踩坑记

          本文链接:https://www.haomeiwen.com/subject/imgfyxtx.html