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的
记在成长的路上

















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

相关文章推荐

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

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

多个UITableView 或者Scrollview 置顶问题

UITableView.scrollsToTop = YES; 或者 UIScrollView.scrollsToTop = YES; 如果页面只有单个,或者固定个数的scrollview或者ta...

[Swift]iOS开发:在视图上绘制文字的3种高效方法以及如何自适应文本高度

在开始之前我想先着重介绍下 NSAttributedString NSAttributedString叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体、字号、字体大...

UITableView的多选删除和滑动删除并存

实现tableView的多选删除,开始的时候使用 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingS...

iOS 多选删除(附tableViewTips及单选删除)

一、前言 这次分享并记录一下tableView的多选删除,并额外记录一下单选删除及tableView的设置小技巧。 二、想要实现的效果图如下: 1、先上原图 2、然后编辑图...

ASP.NET 中listbox实现上移下移置顶置底,(支持多选)

///  /// 得到选定项的值 ///  ///  protected string[] getSelectedValue() {  ArrayList a = new ArrayList();  ...
  • wdywqc
  • wdywqc
  • 2011-01-19 15:00
  • 1411

ios tableViewCell 数组方式 全选、多选的删除

typedef NS_ENUM(NSUInteger, EditTypes) {     // 删除状态     deleteForEditTypes = 0,     // 编辑状态    ...

UITableView 多选删除功能 IOS

UITableView多选状态 删除效果图 首先在UITableView的 edittingStyleForRowAtIndexPath函数中,添加如下代码- (UITableViewCellEdi...

IOS UITableView多选删除功能

UITbableView作为列表展示信息,除了展示的功能,有时还会用到删除,比如购物车、收藏列表等。   单行删除功能可以直接使用系统自带的删除功能,当横向轻扫cell时,右侧出现红色的删除按钮...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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