ios 进阶ios UI与自定义控件开发技巧

TableView左滑删除功能实现及不经意间遇到的坑

2016-12-14  本文已影响4513人  暗尘随码去

TableView左滑删除功能相信在很多APP中都可以看到,不过在自己写的过程中还是遇到了几处小问题。

左滑删除实现过程


//左拉抽屉(删除和修改按钮)
- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 添加一个删除按钮
    UITableViewRowAction *deleteRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"删除用户"handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
                [self.dataArr  removeObjectAtIndex:indexPath.row];
                [m_tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }];
    
    // 修改资料按钮
    UITableViewRowAction *editRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"修改资料"handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
        
    }];
    
    editRowAction.backgroundColor = [UIColor blueColor];
    // 将设置好的按钮放到数组中返回
    return @[deleteRowAction, editRowAction];
}

左滑功能.png

在我继续完善删除功能的时候问题就来了

      /** 所有的数据 */
@property (nonatomic, strong) NSMutableArray *dataArr;
@end

@implementation ZiLiaoViewController

-(NSMutableArray *)dataArr{
    if (!_dataArr) {
        _dataArr = [NSMutableArray array];
    }
    return _dataArr;
}

出现的原因是因为在数据请求成功后给dataArr赋值的时候,把一个不可变数组赋值给一个可变数组,所以即使声明了NSMutableArray可变,也没用!

NSMutableDictionary *dic =json[@"result"];
            self.dataArr = dic[@"data"];

解决办法:在声明一个新的可变数组进行操作

NSMutableArray * temArray = [NSMutableArray arrayWithArray:self.dataArr];
                [temArray removeObjectAtIndex:indexPath.row];
NSMutableArray * temArray = [NSMutableArray arrayWithArray:self.dataArr];
[temArray removeObjectAtIndex:indexPath.row];
self.dataArr = [NSMutableArray arrayWithArray:temArray];
[m_tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

至此左滑删除功能实现

上一篇下一篇

猜你喜欢

热点阅读