多选删除和tableView折叠

多选删除和tableView的折叠是昨天没事的时候练习了一下,然后里面有些地方是需要注意的,来记录下,防止自己以后忘了 - -

多选删除
先说下多选删除,在这里的思路就是让tableView进入到编辑状态,同时注意返回编辑类型时,返回删除和插入。然后用一个可变数组记录所选择的cell的indexPath,之后删除即可。下面贴一下代码说明下,主讲思路和注意的点。

  • 在这里返回tableView的编辑类型,这样才可以进行删除操作。
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
}
  • 第一个方法是对选中cell的添加,第二个方法是对未选中cell的移除。在这里第二个方法是为了对应cell选中后再次选择取消选中后数组移除该cell的indexPath。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.selectedArray addObject:indexPath];
}

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.selectedArray removeObject:indexPath];
}
  • 这里是删除操作,这里有个点说一下,在数组进行删除时,请注意不要挨个删除,这样做的后果就是超出下标!因为在你删除一个元素的时候,那时候后面的元素下边便会减少,这是你再进行删除,而原来数组记录的indexPath是不会变的,所以会超出下标。在这里我们要一次性全部删除,即可。
    if (self.selectedArray.count >0) {
        NSMutableIndexSet *indexSet = [[NSMutableIndexSet alloc]init];
        for (NSIndexPath *indexPath in self.selectedArray) {
            [indexSet addIndex:indexPath.row];
        }
        /**  这里注意 songs不能挨个删除 因为在删除一个的时候count已经发生变化 所以再删除时会超出下标 所以必须一次性全部删除**/
        [self.songs removeObjectsAtIndexes:indexSet];
        [self.tableView deleteRowsAtIndexPaths:self.selectedArray withRowAnimation:UITableViewRowAnimationAutomatic];
        [self.selectedArray removeAllObjects];
    }
    [self.tableView reloadData];

这里是演示


tableView的折叠
这里简单说明下,我实现tableView折叠的思路:即点击headerView的时候,对是否展开进行判断,然后reload一下即可。是不是贼简单~下面来贴下代码细说下。

  • 首先我这是创建了一个实体类,里面有两个属性,一个是是否展开,另一个是展开的数据。(我这投机取巧了,就是为了简单的实现功能,没有封装啥的 - -,所以讲下思路就行 - -)
/**
 *  是否展开
 */
@property (nonatomic, assign) BOOL isFolding;
/**
 *  数据
 */
@property (nonatomic, strong) NSArray *songs;
  • 这是数据,一个字典。
        TSFoldingExpansion *t1 = [[TSFoldingExpansion alloc]init];
        TSFoldingExpansion *t2 = [[TSFoldingExpansion alloc]init];
        TSFoldingExpansion *t3 = [[TSFoldingExpansion alloc]init];
        t1.isFolding = YES;
        t2.isFolding = YES;
        t3.isFolding = YES;
        t1.songs = [NSArray arrayWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9", nil];
        t2.songs = [NSArray arrayWithObjects:@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19", nil];
        t3.songs = [NSArray arrayWithObjects:@"20",@"21",@"22",@"23",@"24",@"25", nil];
        _singerDic = [NSDictionary dictionaryWithObjectsAndKeys:t1,@"first",t2,@"second",t3,@"third", nil];
  • 我们这里是自定义的headerView,在里面添加了一个button,同时将index.section赋给button的tag,记录下来方面在点击button的事件中进行reload。
    id key = self.singerDic.allKeys[button.tag];
    TSFoldingExpansion *foldingExpansion = self.singerDic[key];
    if (foldingExpansion.isFolding) {
        foldingExpansion.isFolding = NO;
    } else {
        foldingExpansion.isFolding = YES;
    }
    NSIndexSet *set = [NSIndexSet indexSetWithIndex:button.tag];
    [self.tableview reloadSections:set withRowAnimation:UITableViewRowAnimationFade];
  • 在这里我们需要获取到字典里的元素,然后判断其是否展开,返回对应的count。
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSInteger count;
    id key = self.singerDic.allKeys[section];
    TSFoldingExpansion *foldingExpansion = self.singerDic[key];
    if (foldingExpansion.isFolding) {
        count = foldingExpansion.songs.count;
    } else{
        count = 0;
    }
    return count;
}

折叠展开

这里只是单纯的实现功能,如果要进行封装直接拿来用的话,还需要更多的工作- -所以在这里只是简单讲一下自己功能实现的思路,怕自己以后忘了。至于demo就不用了,毕竟主要的方法都贴出来了。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值