亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

iOS 小知識點 UITableViewCell刪除相關

標簽:
iOS

####背景:
UITableView的使用
cell上有删除按钮,通过cell上的按钮回调实现删除cell和删除数据源

####问题:
除了第一次删除,或者当前cell的indexpath和相对于tableView的indexpath是一致的情况,删除没有问题。
其他的删除就会出现下面的问题:删除错位,会删除cell上显示的indexPath对应于列表的cell。
例如:cell(0,4)删除,就会删除列表上第五个cell

####原因:
cell的删除回调会在删除时捕获当前cell的indexpath,导致出现删除错位,其实删除的是block捕获的indexpath
tableView就会删除相对于列表的indexPath,而不是当前操作的cell

图片描述

####错误代码展示

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ATableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([ATableViewCell class]) forIndexPath:indexPath];
    __weak typeof(self) weakSelf = self;
    cell.delegateBlock = ^(UIButton * _Nonnull btn) {
        [weakSelf.datas removeObject:self.datas[indexPath.row]];
        [weakSelf.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight];
    };
    cell.textLabel.text = [NSString stringWithFormat:@"(0,%@)",self.datas[indexPath.row]];
    
    return cell;
}

正确代码展示

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ATableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([ATableViewCell class]) forIndexPath:indexPath];
    __weak typeof(self) weakSelf = self;
    cell.delegateBlock = ^(UIButton * _Nonnull btn) {
        CGPoint point = [btn convertPoint:btn.bounds.origin toView:tableView];
        NSIndexPath *newIndexPath = [tableView indexPathForRowAtPoint:point];
        [weakSelf.datas removeObject:self.datas[newIndexPath.row]];
        [weakSelf.tableView deleteRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationRight];
    };
    cell.textLabel.text = [NSString stringWithFormat:@"(0,%@)",self.datas[indexPath.row]];
    
    return cell;
}
點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
移動開發工程師
手記
粉絲
32
獲贊與收藏
323

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消