UISearchController踩坑記

首先需要感謝一下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的角度來解決。知道處理的同學,請留言。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,973評論 19 139
  • 項目中需要使用搜索功能,之前都是使用UISearchBar+UISearchDisplayController或者...
    小唐羽鋒閱讀 31,079評論 45 51
  • 一、搜索功能我相信很多app都用得上,iOS系統提供做搜索的類有那幾種呢? 1.UISearchBar,這個相信大...
    _Erica閱讀 17,626評論 18 67
  • 搜索條是我們經常使用的一個控件; iOS8之前,使用搜索采用的是:UISearchBar+UIDisplayCon...
    差不多先生__閱讀 538評論 0 1
  • 第一章:時空開掛器(超度:時空) 2058年8月21日(由于人類大量生產各型機器人至使有限的核能原料“軸”開始處于...
    仁個友致閱讀 495評論 4 3