對(duì)UISearchController的探索(一)

前言

在楊武老師講的TableView視頻里面谷朝,有這么一段介紹了搜索的部分飒硅。
UISearchBar(iOS2+)
UISearchDisplayController(iOS7)
UISearchController(iOS8)
UISearchController是作為現(xiàn)在最新的搜索工具涎嚼,具體怎么用也沒(méi)有講解奏夫,正好我也沒(méi)有學(xué)過(guò)刮吧,所以想從文檔入手移必,查看怎么去使用一個(gè)UISearchController。
全文語(yǔ)言為Swift遭殉。
全部資料來(lái)自Document and Api Reference舱禽。


初始化

![init][1]

這里的參數(shù)searchResultsController為展示搜索結(jié)果的UIViewController類(lèi)的對(duì)象,如果展示搜索結(jié)果的界面與自己搜索結(jié)果的頁(yè)面是同一個(gè)視圖恩沽,那么就直接填寫(xiě)nil。

現(xiàn)在就來(lái)初始化一個(gè)UISearchController翔始。并將其放入自己的TableView中罗心,因?yàn)楸酒饕v解UISearchController,所以創(chuàng)建TableView的過(guò)程略過(guò)。

  var searchController:UISearchController = UISearchController.init(searchResultsController: nil)

 //MARK:- Life cycle
    override func viewDidLoad()
    {
        super.viewDidLoad()
        self.tableview.tableHeaderView = self.searchController.searchBar;
    }


Active

![Active][2]
active屬性表示搜索界面的狀態(tài)城瞎,只讀屬性渤闷。


Delegate

![delegate][3]
delegate就是UISearchController的代理。
如果要設(shè)置代理脖镀,首先要繼承UISearchControllerDelegate這個(gè)協(xié)議飒箭。
在點(diǎn)進(jìn)去協(xié)議后可以看到里面的方法。

public protocol UISearchControllerDelegate : NSObjectProtocol {
    
   // These methods are called when automatic presentation or dismissal occurs. 
   //They will not be called if you present or dismiss the search controller yourself.
    @available(iOS 8.0, *)
    optional public func willPresentSearchController(searchController: UISearchController)
    @available(iOS 8.0, *)
    optional public func didPresentSearchController(searchController: UISearchController)
    @available(iOS 8.0, *)
    optional public func willDismissSearchController(searchController: UISearchController)
    @available(iOS 8.0, *)
    optional public func didDismissSearchController(searchController: UISearchController)
    
    // Called after the search controller's search bar has agreed to begin editing or when 'active' is set to YES. 
   //If you choose not to present the controller yourself or do not implement this method, a default presentation is performed on your behalf.
    @available(iOS 8.0, *)
    optional public func presentSearchController(searchController: UISearchController)
}

可以看出都是可選方法蜒灰,應(yīng)該是UISearchController的Life cycle弦蹂。我們可以結(jié)合剛剛的active屬性,去模擬這些方法發(fā)生的時(shí)間順序强窖。

//MARK:- UISearchControllerDelegate
    func presentSearchController(searchController: UISearchController) {
        print("presentSearchController \(searchController.active)");
    }
    func willPresentSearchController(searchController: UISearchController) {
        print("willPresentSearchController \(searchController.active)");
    }
    func didPresentSearchController(searchController: UISearchController) {
         print("didPresentSearchController \(searchController.active)");
    }
    func didDismissSearchController(searchController: UISearchController) {
        print("didPresentSearchController \(searchController.active)");
    }
    func willDismissSearchController(searchController: UISearchController) {
        print("willDismissSearchController \(searchController.active)");
    }

運(yùn)行程序凸椿。
點(diǎn)擊搜索欄。
![s1][4]

presentSearchController false
willPresentSearchController false
didPresentSearchController true

![s2][5]
點(diǎn)擊cancel

willDismissSearchController true
didPresentSearchController false


dimsBackgroundDuringPresentation

![4.png-120kB][6]
決定在搜索時(shí)翅溺,底層的內(nèi)容是否要變暗脑漫。
默認(rèn)值是true髓抑。

默認(rèn)情況就是這樣:
![dimTure][7]

如果我們?cè)O(shè)定為false
設(shè)定代碼

self.searchController.dimsBackgroundDuringPresentation = false

那么現(xiàn)在搜索時(shí)界面就是這樣:
![dimFalse][8]


hidesNavigationBarDuringPresentation

![hideNav][9]
在搜索欄使用的時(shí)候是否需要隱藏NavigationBar,默認(rèn)值為true优幸。
效果圖:
![hideTure][10]
如果我們?cè)O(shè)定為false
設(shè)定代碼

self.searchController.hidesNavigationBarDuringPresentation = false

那么現(xiàn)在界面就是這樣:
![hideFalse][11]


searchBar

![searchBar][12]

search controller 所使用的 search bar 對(duì)象吨拍,只讀屬性。


searchResultsController

![searchController][13]

管理搜索結(jié)果的 view controller网杆,只讀屬性羹饰。


searchResultsUpdater

![searchResultsUpdater][14]

該對(duì)象更新搜索結(jié)果的view controller的內(nèi)容。

因?yàn)閕d< UISearchResultsUpdating >可以看出這也是一個(gè)delegate
所以這時(shí)候我們給class繼承UISearchResultsUpdating協(xié)議跛璧。

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource ,UISearchControllerDelegate ,UISearchResultsUpdating 

并設(shè)置代理严里。

  self.searchController.searchResultsUpdater=self

點(diǎn)進(jìn)UISearchResultsUpdating協(xié)議中,查看其代理方法追城。
![update][15]
發(fā)現(xiàn)只有一個(gè)方法刹碾,- updateSearchResultsForSearchController:,該方法在點(diǎn)擊search bar或者用戶改變search bar的時(shí)候會(huì)被調(diào)用。
另外該方法是Required座柱,說(shuō)明必須要實(shí)現(xiàn)迷帜。

   //MARK:- UISearchResultsUpdating
    func updateSearchResultsForSearchController(searchController: UISearchController)
    {
        
    }

結(jié)尾

updateSearchResultsForSearchController這個(gè)方法是UISearchController的關(guān)鍵部分,更新將稍后放出色洞。
[1]: http://static.zybuluo.com/zandhappy/49xgvujsu7f8hl03iy02eba5/1.png
[2]: http://static.zybuluo.com/zandhappy/26wknsmzx4w8rwlimonuq0uo/2.png
[3]: http://static.zybuluo.com/zandhappy/uusxt8eodiblqfj8o6wvu8zp/3.png
[4]: http://static.zybuluo.com/zandhappy/qinsgrldr0qa1a1m3eldgg9z/s1.png
[5]: http://static.zybuluo.com/zandhappy/424585967r3kk0afik0o5pfq/s2.png
[6]: http://static.zybuluo.com/zandhappy/nm6bu5uc6xx85qluh2w0eq3q/4.png
[7]: http://static.zybuluo.com/zandhappy/x1icvr4xoelekvg80mm8u7ov/dimTure.png
[8]: http://static.zybuluo.com/zandhappy/olt64voim51c6oirfidzjqgy/dimno.png
[9]: http://static.zybuluo.com/zandhappy/076mjoufk3ecky99jdblzlms/hideNav.png
[10]: http://static.zybuluo.com/zandhappy/ohzqydions6b5nbi1dvtmzr8/hideTure.png
[11]: http://static.zybuluo.com/zandhappy/ef7klmo7uf4eby83ka2bu2sb/hideFalse.png
[12]: http://static.zybuluo.com/zandhappy/hjuea4g5b51i81q3tf0bsy3h/searchBar.png
[13]: http://static.zybuluo.com/zandhappy/w22iiq9e0t97q5at5l65rfq8/searchController.png
[14]: http://static.zybuluo.com/zandhappy/ci63l8wyva1wq4irbk0wxhav/searchResultsUpdater%20.png
[15]: http://static.zybuluo.com/zandhappy/f4vgv609mb81aaq1ac1rucc6/update.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末戏锹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子火诸,更是在濱河造成了極大的恐慌锦针,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件置蜀,死亡現(xiàn)場(chǎng)離奇詭異奈搜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)盯荤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)馋吗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人秋秤,你說(shuō)我怎么就攤上這事宏粤。” “怎么了灼卢?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵绍哎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我鞋真,道長(zhǎng)蛇摸,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任灿巧,我火速辦了婚禮赶袄,結(jié)果婚禮上揽涮,老公的妹妹穿的比我還像新娘。我一直安慰自己饿肺,他們只是感情好蒋困,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著敬辣,像睡著了一般雪标。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上溉跃,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天村刨,我揣著相機(jī)與錄音,去河邊找鬼撰茎。 笑死嵌牺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的龄糊。 我是一名探鬼主播逆粹,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼炫惩!你這毒婦竟也來(lái)了僻弹?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤他嚷,失蹤者是張志新(化名)和其女友劉穎蹋绽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體筋蓖,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卸耘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扭勉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苛聘,死狀恐怖涂炎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情设哗,我是刑警寧澤唱捣,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站网梢,受9級(jí)特大地震影響震缭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜战虏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一拣宰、第九天 我趴在偏房一處隱蔽的房頂上張望党涕。 院中可真熱鬧,春花似錦巡社、人聲如沸膛堤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肥荔。三九已至,卻和暖如春朝群,著一層夾襖步出監(jiān)牢的瞬間燕耿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工姜胖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留誉帅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓谭期,卻偏偏與公主長(zhǎng)得像堵第,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子隧出,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理踏志,服務(wù)發(fā)現(xiàn),斷路器胀瞪,智...
    卡卡羅2017閱讀 134,715評(píng)論 18 139
  • 本文譯自:UISearchController Tutorial: Getting Started 當(dāng)一個(gè)app要...
    康富貴閱讀 2,134評(píng)論 2 18
  • 本文翻譯自:http://www.raywenderlich.com/113772/uisearchcontrol...
    Xiao_Li閱讀 13,266評(píng)論 3 20
  • 搜索條是我們經(jīng)常使用的一個(gè)控件针余; iOS8之前,使用搜索采用的是:UISearchBar+UIDisplayCon...
    差不多先生__閱讀 529評(píng)論 0 1
  • 這個(gè)假期是我過(guò)的最充實(shí)的假期。我們擺小夜市凄诞、給媽媽過(guò)生日圆雁、吃了很多好吃的… 媽媽的生日! 品嘗美食帆谍! ...
    結(jié)晶_5571閱讀 289評(píng)論 1 0