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