美文网首页代码优化iOS 开发 iOS开发
cell中事件代理到tableView进行操作(如删除)的实现

cell中事件代理到tableView进行操作(如删除)的实现

作者: 大灰灰iOS | 来源:发表于2015-03-25 23:08 被阅读1004次

项目中有个需求,cell的删除按钮代理到tableView里实现并进行删除动画。

原来我的做法是,给cell加个属性cellIndex,然后在cell赋值的时候,将indexPath.row赋给cellIndex。

后来发现有个问题,就是我连续进行两次删除操作的时候,cell的cellIndex就会发生混乱。

所以改用以下方法,在cell中取到indexPath,代理出去使用,bug得到解决

//IOS7以后,cell的superView为UITableViewWrapperView
UITableView *tableView = (UITableView *)self.superview.superview;
NSIndexPath *indexPath = [tableView indexPathForCell:self];
//然后代理到tableView,执行:
[self.list removeObjectAtIndex:index];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];

下面拟将获取indexPath的方法封装在UITableViewCell中,方便使用:

@interface UITableViewCell (UnNuLL)
- (NSIndexPath *)getIndexPath;
@end
@implementation UITableViewCell (UnNuLL)

- (NSIndexPath *)getIndexPath
{
    //IOS7 OR LATER AVALIABLE
    UITableView *tableView = (UITableView *)self.superview.superview;
    return [tableView indexPathForCell:self];
}

@end

简书已经弃用,欢迎移步我的小专栏:
https://xiaozhuanlan.com/dahuihuiiOS

相关文章

网友评论

  • 闭家锁:曾经为了展示完整删除动画,又不影响多次连续删除,造成indexpath混乱,在删除动画开始时禁用tableview交互,dispath_after延时0.25秒,然后再reload一下,更新indexpath😁
  • 云逸枫林:一般 通过model 的id绑定 cell 操作会安全点
    大灰灰iOS:@云逸枫林 对了我想起来了。。删除要动画,还是得用代理,然后把model传回来,或者用block会比较开心。。
    大灰灰iOS:@云逸枫林 是的,那时候闲麻烦。其实model加个参数,然后reload就好了。
  • 大灰灰iOS:@誓愿枫 嗯啊。我这tablview不用的,只获取indexpath
  • 8d2b8086c81a:在 cell里面获取tableview,你这种方法不是很安全。

本文标题:cell中事件代理到tableView进行操作(如删除)的实现

本文链接:https://www.haomeiwen.com/subject/tlogxttx.html