美文网首页
UITableView的多选特殊处理

UITableView的多选特殊处理

作者: ChangeWorld | 来源:发表于2017-01-09 00:20 被阅读54次

tableView的多选多见于"全选" "乱序多选" "反选"和 "单选" 等场景, 不过最近有个需求,需要拖动进度条般的选中,不能间断的那种,就是随心所欲,选中到哪里前面的cell也要跟着选中...

描述需求:
  • 1 分期支付,一年12个月,默认选中第一个月
  • 2 付完一期,则这一期消失,第二期变成第一期显示(主要通过后台,前台不需要怎么处理,取得数据源显示即可)
  • 3 灵活支付,可支付多期,选择到哪一期,那么前面的期数也会被选中. 比如: 选中第一期,那么第一期被选中(毫无意义可言) --- 选中第三期,则第一,二,三期都被选中...以此类推,选择第十二期,就好比全选.
  • 4 将已支付的期数,显示到tableView的另一个分组(洒洒水而已啦)

基于此,我开始在网上疯狂的找轮子,希望用最快的时间,最少的代价去改造一个新的功能,也许这是为自己不写重复代码找借口吧,想怎样就怎样吧,就这样干了

#import "ViewController.h"
#import "MyTableViewCell.h" 
///MARK: -这是一个简单的记录状态的模型
@interface Item : NSObject

@property (retain, nonatomic) NSString *title;
@property (assign, nonatomic) BOOL isChecked;

@end


@implementation Item

@end


/// MARK: -控制器代码
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>

@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (retain, nonatomic) NSMutableArray *items;

@end

///cell是一个图片和一个label  根据isChecked显示不同图片渲染选中状态
static  NSString *CellID = @"MyTableViewCell";

@implementation ViewController

- (NSMutableArray *)items
{
    if (_items==nil) {
        _items =[[NSMutableArray alloc]init];
    }
    return _items;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    for (int i=0; i< 12; i++) {
        Item *item = [[Item alloc] init];
        item.title = [NSString stringWithFormat:@"第%d期",i+1];
        item.isChecked = NO;
        [self.items addObject:item];
    }

    [self.tableView registerNib:[UINib nibWithNibName: CellID bundle:nil ] forCellReuseIdentifier: CellID];
}

#pragma mark- UITableViewDelegate
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.items count];
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleNone;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    MyTableViewCell *cell = (MyTableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellID];
    Item* item = [_items objectAtIndex:indexPath.row];
    if(indexPath.row == 0){
        item.isChecked = YES;
    }
    cell.myTextLabel.text = item.title;
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    [cell setChecked:item.isChecked];
    return cell;;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    for (NSInteger i = 0; i <= indexPath.row; i++) {//比选择的还前面的就选中
            Item* item = self.items[i] ;
            MyTableViewCell *cell = (MyTableViewCell*)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
            item.isChecked = YES;
            /// 根据模型的状态显示不同的图片  通过修改数据源渲染界面,这样才不至于导致cell复用 (重影现象即显示不正确)
            [cell setChecked:item.isChecked];
        }

        for (NSInteger j = indexPath.row+1 ; j<_items.count; j++) {//比选择的还后面的就取消选中
            Item* item = self.items[j] ;
            MyTableViewCell *cell = (MyTableViewCell*)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow: j inSection:0]];
            item.isChecked = NO;
            [cell setChecked:item.isChecked];
        }
        [self.tableView reloadData];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

@end
其中"MyTableViewCell"这是通过XIB定制的cell,简单事简单做.

相关文章

  • UITableView的多选特殊处理

    tableView的多选多见于"全选" "乱序多选" "反选"和 "单选" 等场景, 不过最近有个需求,需要拖动进...

  • UITableView多选状态下的一些问题

    UITableView 多选 创建一个 UITableView 进入多选模式,调用 TableView 的 set...

  • UITableView怎么在非Editing状态下多选

    UITableView单选多选使我们经常使用的,使用系统的多选打开UITableView的Editing,然后使用...

  • TableView基础

    总结一些UITableView常见的问题 和 常用的方法iOS UITableView的多选UITableView...

  • UITableView实现多选

    今天做了一个UITableView多选的项目, 开始写的很麻烦, 还用了字典存储状态, 后来好好查了一下有关于多选...

  • UITableView多选操作

    之前项目中用到tableview的多选操作,今天梳理总结一下 要实现tableview的多选操作有很多种方式.有系...

  • UITableView多选删除

    整体代码如下: 注:具体分的步骤只是根据demo来的 1、控件的初始化:(不用多说,都会) allowsMulti...

  • iOS UITableView的多选

    好久没写博客了,写些平常用的到的东西吧。一些列表经常需要编辑多选的功能,而UITableview自带多选删除的功能...

  • UITableView实现全选

    UITableView实现全选以及取消全选在此之前我曾经写过UITableView如果实现多选,在简书中,有需要的...

  • 8.4、UITableView单选多选

    import UIKit class ViewController: UIViewController, UITa...

网友评论

      本文标题:UITableView的多选特殊处理

      本文链接:https://www.haomeiwen.com/subject/bsycbttx.html