前面寫(xiě)過(guò)一篇關(guān)于UIPopoverPresentationController
簡(jiǎn)單實(shí)用的文章,在使用中可能會(huì)碰到一個(gè)問(wèn)題,就是點(diǎn)擊pop出來(lái)的界面之外的地方pop出的界面才會(huì)消失,這就導(dǎo)致如果我在pop出的界面上放置了button 或者 放了tableView的時(shí)候,觸發(fā)點(diǎn)擊事件了,而pop出的界面還存在,很影響用戶體驗(yàn),基于這點(diǎn)我也是問(wèn)了些前輩,發(fā)現(xiàn)都不知道怎么手動(dòng)關(guān)閉這個(gè)pop出的界面,所以我把頭文件翻遍了都沒(méi)找到相應(yīng)的方法,最終沒(méi)辦法,我一個(gè)個(gè)屬性和方法試出來(lái)的. 先看下我實(shí)現(xiàn)的效果:
打開(kāi)UIPopoverPresentationController
的頭文件你會(huì)發(fā)現(xiàn)這樣一些方法
你可以看到帶
dismiss
的方法,但是這并不是我們需要的,這兩個(gè)方法是在pop出的界面消失或者即將消失的時(shí)候才調(diào)用的,而我們需要的屈確實(shí)類似于dismissViewControllerAnimated:<#(BOOL)#> completion:<#^(void)completion#>
的方法,如果你按照普通的方法來(lái)打的話會(huì)出現(xiàn)這兩種方法然而這兩種方法并沒(méi)有什么用,通過(guò)名字你也能看出來(lái)這并不是我們想要的,但是dismissal并沒(méi)有其他代碼提示了.機(jī)智的我突然想到是不是可以調(diào)用一下他的父視圖做dismiss,但是事與愿違,
self.categoryPopover.superclass
值點(diǎn)出了父類,這怎么dismiss,不賣關(guān)子了,直接展示怎么解決的.如圖所示,我想按得是pop但是沒(méi)想到按完p的時(shí)候我無(wú)意中看到了ViewController,頓時(shí)知道該怎么做了
此段代碼觸發(fā)的時(shí)候,pop出的控制器就會(huì)銷毀,我寫(xiě)這篇博客的目的不是單純的介紹解決辦法,而是想告訴到家解決辦法的途徑,當(dāng)遇到問(wèn)題的時(shí)候我第一個(gè)想法是自己找頭文件解決,找不到了想到的是百度,然而百度很多帖子都是抄襲別人的,自己被沒(méi)有實(shí)際操作,甚至有些問(wèn)題沒(méi)有答案,這個(gè)時(shí)候就要靠自己了,有很多問(wèn)題是想通的,想讓控制器消失,那肯定要拿到這個(gè)控制器,所以我第一次想到的是父類,通過(guò)代碼打印可以看到
self.categoryPopover
的父類就是ViewController,但是你想拿到他怎么辦,通過(guò)KVO可以拿到,但很麻煩,這個(gè)時(shí)候你可以試試點(diǎn)語(yǔ)法,本次的問(wèn)題就完美解決了.
iOS是不斷跟新的,很多老的方法不斷被棄用,已知抱著老的方法不斷的去用,報(bào)黃也不去理會(huì),當(dāng)有一天真的被棄用的時(shí)候你會(huì)發(fā)現(xiàn),你本來(lái)有時(shí)間去學(xué)習(xí)新的替換方法的,卻因?yàn)楣こ檀叩木o而沒(méi)有辦法去學(xué)習(xí)了,所以只能百度別人的方法,照本宣科之后出一頓莫名其妙的錯(cuò)誤,引以為戒吧.