继承MGSwipeTableCell无法滑动的问题

继承MGSwipeTableCell无法滑动的问题

1. 什么是MGSwipeTableCell

用过微信的人都知道在会话列表页中,滑动一个Cell会出现,删除和标为未读两个按钮。

删除很正常,Tableview自带就有这个功能,但是iOS不允许程序扩展滑动视图,也就是说除了自带的删除,不能出现其他的按钮,微信的标为未读其实是自定义扩展出来的。MGSwipeTableCell这个开源组件就是为了添加Cell的滑动按钮的。让我们来看一下这个插件的效果图

image
image

很酷炫有木有!!

它的GitHub地址是:MGSwipeTableCell,在README.md中介绍了最简单的使用它的方式。非常简单明了。相信大家一看就懂了。它还自带了一个demo,可以让你看清除它所有的展示方式。

2. 无法滑动?

我这边要说的是一个使用时可能出现的问题。

当我按照官方给出的方法来使用MGSwipeTableCell的时候,我的Cell是无法滑动的,就跟没有使用MGSwipeTableCell一样。但是当我下拉刷新(我的应用有做下拉刷新)之后,Cell又变得可以滑动,和预期的一样。这让我很疑惑

这边放上两张对比图:


image
image

image
image

我查看源代码发现在MGSwipeTableCell类中的
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

方法中有一个方法initViews,这个方法添加了单元格所需要的滑动视图和手势操作。那我就怀疑是因为
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier没有被调用。跟踪发现这个方法确实不会被调用,除非你是完全代码自定义单元格,在storyboard或者xib中是不会用这个方法初始化单元格的。那么也就意味着initViews没有被调用,滑动视图和手势没有被添加。

那就说的通了,然后我在MGSwipeTableCell中继续搜索initViews,发现在awakeFromNib也存在。但是我在自定义的Cell中没有调用父类MGSwipeTableCellawakeFromNib,所以导致初始化不成功。在调用之后解决了这个问题。

推荐阅读更多精彩内容