【第22期】观点:IT 行业加班,到底有没有价值?

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

















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

相关文章推荐

Android实现GridView的item长按拖动删除完美实现(带动画效果)

领导这几天让做一个项目,就是可以实现像支付宝首页一样的可以长按拖动,删除的界面,以前没做过,领导让我做的时候觉得简直是老虎吃天,无从下手啊,可是领导的任务还是要实现的,没办法,就自己网上找咯,但是网上...

listView一键置顶,刷新加载,悬浮按钮

最近项目里面有一个listview一键置顶,刷新加载,悬浮按钮功能,整理一下供大家参考1、build.gradle中添加依赖compile 'com.melnykov:floatingactionbu...

RecyclerView侧滑菜单,滑动删除,长按拖拽,下拉刷新上拉加载

RecyclerView侧滑菜单,RecyclerView滑动删除,RecyclerView长按拖拽,RecyclerView下拉刷新上拉加载 版权声明:转载必须注明本文转自严振杰的博客: htt...

iOS开发:手机QQ拖拽消除未读消息特效("一键下班"功能)相关资源汇总

作为一个iOS Developer,看到手机QQ的未读消息数目显示可以像橡皮糖一样被拉伸的效果,都会感觉手指很痒,很想马上用自己的代码去实现一下,如果功夫不够深,真正去做的时候,还是有点力不从心,我就...

超顺滑!优化android ListView拖拽移位

由于项目需求,要实现类似于ios上的listview的排序。之前在网络上搜索,发现了下面这篇文章,先感谢一下: http://blog.csdn.net/jj120522/article/detai...
  • rwecho
  • rwecho
  • 2013-05-16 21:06
  • 10593

DHTMLX中对dhtmlxgrid表格行的置顶置底功能,以及拖动排序功能的实现

大家好,这半年工作上有点小忙,好久没写博了。        今天,要给大家分享的是JS框架DHTMLX中的表格控件dhtmlxgrid的一组功能的实现,这些功能在高级版(付费版)中已经有相关的接...

Android 高仿 频道管理----网易、今日头条、腾讯视频 (可以拖动的GridView)附源码DEMO

距离上次发布(android高仿系列)今日头条 --新闻阅读器 (二) 相关的内容已经半个月了,最近利用空闲时间,把今日头条客户端完善了下。完善的功能一个一个全部实现后,就放整个源码。开发的进度就是...

2015最新安卓例子自定义控件等分类源码免费下载

源码的下载地址时http://yunpan.cn/cjwwij3FcBtZV 访问密码3579 本列表源码永久免费下载地址http://www.javaapk.com/demo  卷 yunpan 的...

GridView多选框全选删除和光棒效果

界面参考:   aspx页面: &lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default7.aspx.cs" Inherits="Default7" %&gt; &lt;!
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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