美文网首页
删除自定义cell 遇到的坑

删除自定义cell 遇到的坑

作者: 乡道狗毛草 | 来源:发表于2016-03-12 10:08 被阅读1877次

自定义的cell的button的是为了确定不同indexpath 的 cell的响应办法 一般是在 button上加tag标签,然后代理传上来在tableView页面上写button方法

Paste_Image.png
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
myTableViewCell *cell = (myTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[myTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.backgroundColor = RGB(17, 18, 19, 1);
}
cell.deleteBtn.tag = indexPath.row
......
}
代理我就不贴上来

这个是我响应的Button TouchUp方法 didDeletelCellIndex: 是代理方法 从Cell页面传上过来

- (void)didDeletelCellIndex:(NSInteger)index
{
 NSLog(@"删除的是-------->>>>%i",index);
[self.mainTable beginUpdates];
NSIndexPath *indexpath =[NSIndexPath indexPathForRow:index inSection:0];
//删除数据源
//  if ([self.delegate respondsToSelector:NSSelectorFromString(@"deleteCellForindex:")]) {
//   [self.delegate deleteCellForindex:index]
//}
//删除相应的数据模型
 [self.ymDataArray removeObjectAtIndex:index]; 
//删除视图cell   
 [self.mainTable deleteRowsAtIndexPaths:@[indexpath] withRowAnimation:UITableViewRowAnimationAutomatic];
 //结束更新数据状态
 [self.mainTable  endUpdates];

}

我现在要说几个坑。
1.删除cell之前一定要删除数据模型index数据源

2.删除后调 (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 方法中对button的Tag 会出错,也就是说如果你的屏幕只能展示一个cell的大小,如果你删除的是 0 cell ,cellForRowAtIndexPath会调[0,1],而并非[0,0],而此时你数据源上的数据事实上是[0];因为上一个被删除了。所以button,tag赋值会出错,导致下次你按删除位置出错。

解决的方法:

  1. 不用系统的 [self.mainTable deleteRowsAtIndexPaths:@[indexpath] withRowAnimation:UITableViewRowAnimationAutomatic];
    删除数据后直接 reload,我发现朋友圈就是这么做的,缺点就是没用自带删除动画,然后reload会消耗更多资源。

2.这个不知道算不算偏方
通过[button superView ] superView]方法能得到myTabelviewCell
然后获得indexpath,不需要button.tag传值了

   myTableViewCell * cell =(myTableViewCell *)[[deleteBtm superview] superview];
   NSIndexPath *indexPath = [self.mainTable  indexPathForCell:cell];
   [self.mainTable beginUpdates];
if ([self.delegate respondsToSelector:NSSelectorFromString(@"deleteCellForindex:")]) {
    [self.delegate deleteCellForindex:indexPath.row];

}
[self.mainTable deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.mainTable  endUpdates];

这样貌似完美解决 然后又不用reload方法了~

相关文章

网友评论

      本文标题:删除自定义cell 遇到的坑

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