前面写过一篇关于UIPopoverPresentationController
简单实用的文章,在使用中可能会碰到一个问题,就是点击pop出来的界面之外的地方pop出的界面才会消失,这就导致如果我在pop出的界面上放置了button 或者 放了tableView的时候,触发点击事件了,而pop出的界面还存在,很影响用户体验,基于这点我也是问了些前辈,发现都不知道怎么手动关闭这个pop出的界面,所以我把头文件翻遍了都没找到相应的方法,最终没办法,我一个个属性和方法试出来的. 先看下我实现的效果:
打开UIPopoverPresentationController
的头文件你会发现这样一些方法
你可以看到带
dismiss
的方法,但是这并不是我们需要的,这两个方法是在pop出的界面消失或者即将消失的时候才调用的,而我们需要的屈确实类似于dismissViewControllerAnimated:<#(BOOL)#> completion:<#^(void)completion#>
的方法,如果你按照普通的方法来打的话会出现这两种方法然而这两种方法并没有什么用,通过名字你也能看出来这并不是我们想要的,但是dismissal并没有其他代码提示了.机智的我突然想到是不是可以调用一下他的父视图做dismiss,但是事与愿违,
self.categoryPopover.superclass
值点出了父类,这怎么dismiss,不卖关子了,直接展示怎么解决的.如图所示,我想按得是pop但是没想到按完p的时候我无意中看到了ViewController,顿时知道该怎么做了
此段代码触发的时候,pop出的控制器就会销毁,我写这篇博客的目的不是单纯的介绍解决办法,而是想告诉到家解决办法的途径,当遇到问题的时候我第一个想法是自己找头文件解决,找不到了想到的是百度,然而百度很多帖子都是抄袭别人的,自己被没有实际操作,甚至有些问题没有答案,这个时候就要靠自己了,有很多问题是想通的,想让控制器消失,那肯定要拿到这个控制器,所以我第一次想到的是父类,通过代码打印可以看到
self.categoryPopover
的父类就是ViewController,但是你想拿到他怎么办,通过KVO可以拿到,但很麻烦,这个时候你可以试试点语法,本次的问题就完美解决了.
iOS是不断跟新的,很多老的方法不断被弃用,已知抱着老的方法不断的去用,报黄也不去理会,当有一天真的被弃用的时候你会发现,你本来有时间去学习新的替换方法的,却因为工程催的紧而没有办法去学习了,所以只能百度别人的方法,照本宣科之后出一顿莫名其妙的错误,引以为戒吧.