UITableView如何撤销移动操作

Posted 大熊猫侯佩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UITableView如何撤销移动操作相关的知识,希望对你有一定的参考价值。

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)


我们知道使用UITableView的委托方法canMoveRowAtIndexPath可以决定某一行cell是否可以被移动,也就是控制源cell是否可以被移动,但是如果我们要控制是否可以移动至目的index呢?

一种想法是在moveRowAtIndexPath:中判断目的index,如果不允许移动,则做反向动作,即删除目的index位置的cell然后重新添加到源index.

但是这个不能实现,因为此时源cell还未移动到目的index,所以不可以删除它.但是moveRowAtIndexPath:方法结束后就失去了对移动操作的控制.

其实有一种简单的方法,就是如果你不想让移动操作生效,包括任何需要改变界面的操作,你只要简单重新刷新TableView视图就可以了.因为你底层数据没有变,所以刷新视图后界面也就不会发生改变,相当于撤销移动操作,而且还有动画效果呢:

技术分享

如上所示我们禁止Add cell的移动,并且禁止任何其他cell移动到Add cell的后面,即确保Add cell总是在视图最后一行.


以上是关于UITableView如何撤销移动操作的主要内容,如果未能解决你的问题,请参考以下文章

用片段替换时操作栏向下移动

如何在git里撤销任何操作

如何将 View 类中的代码片段移动到 OnAppearing() 方法?

如何撤销Git操作?

UITableView的添加删除移动操作

如何使 FAB 避免在 ViewPager 中移动,但又是其中的片段的一部分?