如何给UICollectionViewCell 添加ios cell长按删除后 cell 抖动删除动画

今天遇到一个问题,需要 UICollectionViewCell 对 ViewController 的属性进行 KVO 观察,之前在忙乱中尝试了各种方法来解除监听总算搞定了。今天,改动了代码又出现这个问题,于是研究了一番。

dealloc 中就能观察到调用顺序),所以在 cell 对象中是没有机会解除监听的。那么只能在 VC 中解除了。(更新)以现在的我来看,这个思路简直无语了,完全没必要做这种多余的事情。当然,说明我进步了。

ViewController 以模态方式显示其他视图或是压入 NavigationVC中,这两个方法也会被调用,如果当前视图第二次消失时,会再一次进行解除操作,这时候就会出现问题了。报错一般是:

大意就是「我没有观察你所以你不能让我解除观察啊」。这说明进行观察就类似没有 ARC 的时代管理内存类似,alloc 了几次就要 release 几次,监听了几次就要解除几次,解除多了少了都不行。时机确定,- dealloc 是完美的时机。那么怎么解除?

但事实上这两个方法不仅仅是在添加或删除 Cell 时才调用,滚动视图时,Cell 在屏幕上的出现或消失也会调用这两个方法,可以说,这两个方法完全跟踪了屏幕上所有 Cell 出现和消失的情况。回想前面说的,观察一次就要解除一次,Cell 出现过一次,那么就要解除一次,观察和解除的次数要相等,那么在这两个方法里进行观察和对应的解除无疑是最佳场所。在 ViewController 被 dealloc 前,还有哪些 Cell 需要解除对 ViewController 的观察呢,就是在屏幕上的那些,其他不在屏幕上的 Cell在消失时就有过对应的解除操作了不用担心,那么使用- visibleCells 遍历屏幕上的 Cell 进行一次解除操作就可以了。Bingo!

一样方便地解除观察了。
04/29 更新:已找到解决办法,方案灵感来自于 stackoverflow 上这条问题下赞同数最高的答案:。上一段提到,问题在于解除操作的最后一步无法完成,苹果没有开放获得可见的 SupplementaryView 的 API。怎么获取,其实路线和 Cell 一样,关键在以下三个方法中:

//由于重用机制,消失在屏幕外的SupplementaryView 会供新出现在屏幕上的使用;
//在这里执行观察操作,如果该 indexPath 在字典里不存在则新建,若存在则更新该键的值。

中也实现了的话,调用行为未知。

[UICollectionReusableView],可以像 Cell 一样方便地解除观察;但在 iOS 8 以及更早的版本中,只能通过其他方法了,见上面的描述。

本人新手刚刚接触ios开发,请教如何才能实现?谢谢!




本站内容均为本站转发,已尽可能注明出处。因未能核实来源或转发内容图片有权利瑕疵的,请及时联系本站,本站会第一时间进行修改或删除。 QQ :

关于网友提出的“(swift)在UICollectionView的cell中添加subView不显示的问题”问题疑问,本网通过在网上对“(swift)在UICollectionView的cell中添加subView不显示的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:


我要回帖

更多关于 ios cell添加长按手势 的文章

 

随机推荐