項(xiàng)目變成從8.0開(kāi)始支持,于是以前UISearchDisplayController的搜索控件就??了,特別丑,所以就改成用最新的UISearchController,坑好多啊QAQ。
先說(shuō)說(shuō)UISearchController腫么用,往往使用一個(gè)新控件都推薦看下官方demo的(其實(shí)我一開(kāi)始用的時(shí)候沒(méi)看,遇到問(wèn)題了再看的,所以其實(shí)還是直接看吧。。遲早會(huì)看??),上鏈接
https://developer.apple.com/library/content/samplecode/TableSearch_UISearchController/Introduction/Intro.html#//apple_ref/doc/uid/TP40014683-Intro-DontLinkElementID_2
1、初始化:

先說(shuō)下代碼里面有幾點(diǎn)要注意的:
1、代理我都是放在了我展示結(jié)果的VC里邊,方便嘛,我項(xiàng)目大多數(shù)搜索框的樣式的差不多的,頁(yè)面樣式也差不多,只是cell樣式不同,所以就放一起。
2、有些地方代碼別省,官方都是這么寫(xiě)的,防止出現(xiàn)啥偏移問(wèn)題。
[searchController.searchBar sizeToFit];
3、self.definesPresentationContext = YES; 哪個(gè)VC承載了搜索欄界面,哪個(gè)VC就得設(shè)置這個(gè)。不設(shè)置你試試,神奇的事情特別多~~
2、使用:
一開(kāi)始呢,我是跟蘋(píng)果官方差不多這樣設(shè)計(jì)的。
說(shuō)下三個(gè)C間的關(guān)系:

基本沒(méi)啥問(wèn)題,除了,如果你不是一層一層的pop或者dismiss回去,而是在LLMSearchDisplayViewController之后比如:
[self.navigationController setViewControllers:@[底部VC, 某個(gè)聊天VC] animated:YES];
直接回到某界面,比如最底部的VC,GG,LLMSearchDisplayViewController、LLMViewControllerB不釋放。這種場(chǎng)景很多的,舉例,搜索某個(gè)人,進(jìn)入某個(gè)人中心,再進(jìn)入到聊天窗口?,F(xiàn)在產(chǎn)品進(jìn)入聊天窗口后,回退都是回到主界面。那肯定要換VC層級(jí)關(guān)系了。
問(wèn)題不僅在不釋放,后面所有VC跳轉(zhuǎn)的動(dòng)畫(huà)也會(huì)混亂。
原因就是self.definesPresentationContext = YES了。
基本就是因?yàn)閁ISearchController是自定義了presentVC動(dòng)畫(huà),你沒(méi)恢復(fù),就釋放不了,就亂了。
解決方案1:
在LLMViewControllerB DidDisappear的時(shí)候,把UISearchController setActive:NO,就好了,但問(wèn)題是產(chǎn)品是接受不了的= =。
誰(shuí)的APP是搜索結(jié)果點(diǎn)一下跳轉(zhuǎn)了界面回去搜索結(jié)果就沒(méi)了?也別想著willAppear的時(shí)候去恢復(fù),因?yàn)閁ISearchController的激活是有動(dòng)畫(huà)的,并且沒(méi)動(dòng)畫(huà)關(guān)閉接口,當(dāng)然有時(shí)間是可以繼承UISearchController重寫(xiě)動(dòng)畫(huà)啥的,但想想就蛋疼。這個(gè)直接否了。
解決方案2:
我思考了下其實(shí)就是在跳轉(zhuǎn)動(dòng)畫(huà)的某一步,頁(yè)面cycle了。所以我決定給LLMSearchDisplayViewController包一層UINavigationController,讓它自己可以跳轉(zhuǎn)。這個(gè)方案基本解決了問(wèn)題,只有會(huì)出現(xiàn)個(gè)新問(wèn)題:NavigationBar的維護(hù),想想就造了,LLMSearchDisplayViewController頁(yè)面NavigationBar肯定是隱藏或者是透明的,但你push進(jìn)來(lái)的頁(yè)面,基本上都會(huì)顯示NavigationBar,所以要做NavigationBar的一些管理=-=。
好,沒(méi)了。不釋放真的很坑。
也希望看見(jiàn)的大神告訴我更好的方案!