IOS UITableView 多选,全选删除,拖动,置顶的实现

原创 2015年11月19日 00:31:30
附上效果图






第一步 
要想看到tableview的多选模式,这两句代码必不可少
1.设置为编辑模式

    [self.tableView setEditing:YES animated:NO];

2.设置编辑样式为多选(两个属性加起来就是这么神奇)


-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath*)indexPath

{

    return UITableViewCellEditingStyleDelete|UITableViewCellEditingStyleInsert;

}


0 处理全选 //实现点击全选按钮,实现全部选中,再点击删除,删除所有选中的cell

//暂时没做反选

//全选按钮点击事件

-(void)allChoiceBtnClick:(UIButton *)btn

{

    btn.selected = ! btn.selected;

    if (btn.selected) {

        //将可见的设为全选状态

        for (NSIndexPath *cellIndex in [self.tableView indexPathsForVisibleRows])

        {

            KeChooseManagerCell * otherCell = (KeChooseManagerCell *)[self.tableViewcellForRowAtIndexPath:cellIndex];

            otherCell.selected = YES;

            self.isAllSelected = YES;

        

            self.indexArr = [NSMutableArray new];

            

            //遍历数组创建含有sectionrowNSIndexPath,然后将它传给tableview,用来删除全部选中的cell

            for (int i = 0; i < self.stockList.count; i++) {

                

                

                NSIndexPath * realIndex = [NSIndexPath indexPathForRow:i inSection:0];

                

                [self.indexArr addObject:realIndex];


            }

            


        }

    }else{

        

        for (NSIndexPath *cellIndex in [self.tableView indexPathsForVisibleRows])

        {

            KeChooseManagerCell * otherCell = (KeChooseManagerCell *)[self.tableViewcellForRowAtIndexPath:cellIndex];

            otherCell.selected = NO;

            self.isAllSelected = NO;

        }

    }

    

}

//删除点击处理

-(void)deleteBtnClick:(UIButton *)btn

{

    if (self.isAllSelected) {//全选

        

        [self.stockList removeAllObjects];

        [self.tableView beginUpdates];

        

        KELog(@"allKeys %@",[deleteDic allKeys]);

        KELog(@"stockcount  %d",self.stockList.count);

        KELog(@"stock %@",self.stockList);

        

        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithArray:self.indexArrwithRowAnimation:UITableViewRowAnimationFade];

        

        KELog(@"allValues %@",[deleteDic allValues]);

        

        //    [deleteDic removeAllObjects];

        

        [self.tableView endUpdates];

        [self.tableView reloadData];

        

        newDataList = self.stockList;

        

    }else

    {//非全选

        //动态绑定(运行时有效<不是编译时起作用>)

        __block NSMutableArray * temp = [NSMutableArray new];

        

        __block typeof(self) weakSelf = self;

        

        [indexArray enumerateObjectsUsingBlock:^(ChooseStockInfo * obj, NSUInteger idx, BOOL * _Nonnull stop) {

            

            NSIndexPath * indexPath = objc_getAssociatedObject(obj, &kKeyForindexAndModel);

            

            [temp addObject:indexPath];

            

            [weakSelf.stockList removeObject:obj];

            

            

        }];

        

        [self.tableView beginUpdates];

        

        KELog(@"allKeys %@",[deleteDic allKeys]);

        KELog(@"stockcount  %d",self.stockList.count);

        KELog(@"stock %@",self.stockList);

        

        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithArray:temp] withRowAnimation:UITableViewRowAnimationFade];

        

        KELog(@"allValues %@",[deleteDic allValues]);

        

        //    [deleteDic removeAllObjects];

        

        [self.tableView endUpdates];

        [self.tableView reloadData];

        

        newDataList = self.stockList;

}



//选中

//选中

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

    ChooseStockInfo * model = [self.stockList objectAtIndex:indexPath.row];

    

    [indexArray addObject:model];


    //绑定modelindexPath

    objc_setAssociatedObject(model, &kKeyForindexAndModel, indexPath, OBJC_ASSOCIATION_RETAIN);    

    KELog(@"didSelect %@",deleteDic);


}


//取消选中

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath

{

    [deleteDicremoveObjectForKey:[self.stockListobjectAtIndex:indexPath.row]];

    

    [indexArray removeObject:indexPath];

    

    KELog(@"Deselect %@",deleteDic);

    

}


1.拖动

//设置可拖动

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {

    return YES;

}

//拖动之后处理的业务逻辑

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
    
    //更新沙盒里的自选股字符串数组
    NSArray * array = (NSArray *)[[SandBox shareInstance] getCoreInfoFromSandBoxWithKey:stockListSandBox];
    stockStrLists = [NSMutableArray arrayWithArray:array];
    
    //向上拖动
    if (fromIndexPath.row > toIndexPath.row) {
        
        [self.stockList insertObject:[self.stockList objectAtIndex:fromIndexPath.row] atIndex:toIndexPath.row];

        [self.stockList removeObjectAtIndex:fromIndexPath.row+1];
        
        //到哪一行
        [tableView reloadData];
        
        //string
        [stockStrLists insertObject:[stockStrLists objectAtIndex:fromIndexPath.row] atIndex:toIndexPath.row];
        [stockStrLists removeObjectAtIndex:fromIndexPath.row+1];
        
        newDataList = self.stockList;
        
        [[SandBox shareInstance] saveCoreInfoToSandBox:stockStrLists withKey:stockListSandBox];
        
        self.changed = YES;
        
        [[NSNotificationCenter defaultCenter] postNotificationName:kStockSortChangedNotification object:@{@"stockList":newDataList,@"operationType":@(Sort),@"stockStrList":stockStrLists}];
        
        
    }else//向下拖动
    {
        [self.stockList insertObject:[self.stockList objectAtIndex:fromIndexPath.row] atIndex:toIndexPath.row];
        
        [self.stockList removeObjectAtIndex:fromIndexPath.row - 1];
        
        [tableView reloadData];
        
        [stockStrLists insertObject:[stockStrLists objectAtIndex:fromIndexPath.row] atIndex:toIndexPath.row];
        
        [stockStrLists removeObjectAtIndex:fromIndexPath.row - 1];
        
        newDataList = self.stockList;
        
        [[SandBox shareInstance] saveCoreInfoToSandBox:stockStrLists withKey:stockListSandBox];
        
        self.changed = YES;
        
        [[NSNotificationCenter defaultCenter] postNotificationName:kStockSortChangedNotification object:@{@"stockList":newDataList,@"opertationType":@(Sort),@"stockStrList":stockStrLists}];
        
    }

    
}



2.设置置顶

[cell setTopBlcok:^(){

        KELog(@"--- %ld ----",(long)indexPath.row);

        //插入到第一个

        [self.stockListinsertObject:[self.stockListobjectAtIndex:indexPath.row]atIndex:0];

        ChooseStockInfo * aa = (ChooseStockInfo *)[self.stockListobjectAtIndex:indexPath.row];

        KELog(@"dataList  %@",aa.stockName);

        //删除挪到下一行的元素

        [self.stockListremoveObjectAtIndex:indexPath.row +1];

        

        [tableView reloadData];

        

        newDataList =self.stockList;

        

        self.changed =YES;

        KELog(@"newDataListTop %@",newDataList);

        

        KELog(@"stockStrLists  begin %@",stockStrLists);

        NSArray * array = (NSArray *)[[SandBoxshareInstancegetCoreInfoFromSandBoxWithKey:stockListSandBox];

        stockStrLists = [NSMutableArrayarrayWithArray:array];

        [stockStrListsinsertObject:[stockStrListsobjectAtIndex:indexPath.row]atIndex:0];

        [stockStrLists removeObjectAtIndex:indexPath.row + 1];

        

        KELog(@"stockStrLists end %@ indexrow%ld",stockStrLists,(long)indexPath.row);

        

        [[SandBox shareInstancesaveCoreInfoToSandBox:stockStrListswithKey:stockListSandBox];

        

        [[NSNotificationCenterdefaultCenterpostNotificationName:kStockSortChangedNotificationobject:@{@"stockList":newDataList,@"operationType":@(Sort),@"stockStrList":stockStrLists}];

        

        KELog(@"newData %@",newDataList);

    }];


//注释没有整理,但是上述代码的功能都是OK的
记在成长的路上

















版权声明:本文为博主原创文章,未经博主允许不得转载。

多个UITableView 或者Scrollview 置顶问题

UITableView.scrollsToTop = YES; 或者 UIScrollView.scrollsToTop = YES; 如果页面只有单个,或者固定个数的scrollview或者ta...
  • zhuweideng
  • zhuweideng
  • 2016年07月29日 12:40
  • 704

iOS UITableView的细致功能(滑动删除,拖动排序,添加行,搜索过滤)

对于UITableView,相信大家都并不陌生,每一个
  • u013623867
  • u013623867
  • 2014年10月21日 16:18
  • 3209

iOS 长按拖拽 添加删除

  • 2016年01月20日 15:58
  • 61KB
  • 下载

iOS开发之仿新闻拖拽排序,编辑删除的效果

拖拽排序是新闻类的App可以说是必有的交互设计,如今日头条,网易新闻等。拖拽排序是一个交互体验非常好的设计,简单,方便。 ####实现方案 1.给CollectionViewCell添加一...
  • Keep_Moving31038
  • Keep_Moving31038
  • 2017年04月08日 14:43
  • 947

iOS原生态删除、置顶某行cell

- (NSArrayUITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:...
  • dangpf520
  • dangpf520
  • 2016年08月15日 17:16
  • 682

关于iOS`UITableViewCell 使用系统 多选 全选问题

最近做一个项目,要用到UITableView中cell的多选和全选。  上网简单一搜索,发现很多小伙伴对于这块是自己自定义cell且通过代码判断,再去改变UI来实现。很多方法的理论基础基本上都是...
  • TF_guo
  • TF_guo
  • 2016年06月02日 16:23
  • 11011

IOSUITableView 反选 全选 删除按钮的实现

@interface Shop : NSObject @property (nonatomic,copy) NSString *icon; // 图片 @property (nonatomic,c...
  • SuYuMingXiangGuan
  • SuYuMingXiangGuan
  • 2015年08月17日 09:54
  • 1824

iOS 全选 反选 和删除

转载:http://www.cnblogs.com/songliquan/p/4518086.html?utm_source=tuicool&utm_medium=referral ...
  • lurenjia_KB
  • lurenjia_KB
  • 2016年08月08日 10:56
  • 1226

UITableView实现全选

UITableView实现全选以及取消全选在此之前我曾经写过UITableView如果实现多选,在简书中,有需要的可以点击查看。UITableView实现多选。在实现多选的基础上,进行全选以及取消全选...
  • CXLiao
  • CXLiao
  • 2016年11月03日 10:14
  • 344

IOSUITableView 反选 全选 删除按钮的实现

@interface Shop : NSObject @property (nonatomic,copy) NSString *icon; // 图片 @property (nonatomic,c...
  • SuYuMingXiangGuan
  • SuYuMingXiangGuan
  • 2015年08月17日 09:54
  • 1824
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOS UITableView 多选,全选删除,拖动,置顶的实现
举报原因:
原因补充:

(最多只允许输入30个字)