Model.h
#importModel.m@interface Model : NSObject @property(nonatomic,strong)NSString *desc; +(instancetype)modelWithDesc:(NSString *)desc; @end
#import "Model.h" @implementation Model +(instancetype)modelWithDesc:(NSString *)desc { Model *m=[Model new]; m.desc=desc; return m; } @endCustomCell.h
#importCustomCell.m@interface CustomCell : UITableViewCell @property(nonatomic,strong)UILabel *titleLb; @property(nonatomic,strong)UIButton *selectBtn; @end
#import "CustomCell.h" #define kWidth ([UIScreen mainScreen].bounds.size.width) @implementation CustomCell - (void)awakeFromNib { } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; } -(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { if(self=[super initWithStyle:style reuseIdentifier:reuseIdentifier]) { self.backgroundColor=[UIColor blackColor]; [self createUI]; self.selectionStyle=UITableViewCellSelectionStyleNone; } return self; } -(void)createUI { for(UIView *sub in self.contentView.subviews) [sub removeFromSuperview]; //选择按钮 self.selectBtn=[[UIButton alloc]initWithFrame:CGRectMake(-20, 10, 20, 20)]; [self.selectBtn setImage:[UIImage imageNamed:@"un_select"] forState:UIControlStateNormal]; [self .selectBtn setImage:[UIImage imageNamed:@"select"] forState:UIControlStateSelected]; [self.contentView addSubview:self.selectBtn]; //默认隐藏 self.selectBtn.hidden=YES; // 标题Lb self.titleLb=[[UILabel alloc]initWithFrame:CGRectMake(20, 0,kWidth-40, 40)]; self.titleLb.textColor=[UIColor whiteColor]; [self.contentView addSubview:self.titleLb]; } @endEditViewController.h
#importEditViewController.m@interface EditViewController : UIViewController @end
#import "EditViewController.h" #import "CustomCell.h" #import "Model.h" #define kWidth ([UIScreen mainScreen].bounds.size.width) #define kHeight ([UIScreen mainScreen].bounds.size.height) #define RGB(r,g,b) ([UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1.0f]) @interface EditViewController (){ UITableView *_tbView; NSMutableArray *_dataArray; NSMutableArray *_delArray; } //底部工具栏 @property(nonatomic,strong)UIView *toolView; @end @implementation EditViewController - (void)viewDidLoad { [super viewDidLoad]; [self setUp]; [self initDataArray]; [self createTbView]; [self createBottomTools]; } //初始设置 -(void)setUp { self.automaticallyAdjustsScrollViewInsets=NO; //导航视图 UIView *naviView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, kWidth, 64)]; naviView.backgroundColor=RGB(157, 25, 36); [self.view addSubview:naviView]; //导航栏标题 UILabel *titleLb=[[UILabel alloc]initWithFrame:CGRectMake(0, 20, kWidth, 44)]; titleLb.text=@"编辑分组"; titleLb.textColor=[UIColor whiteColor]; titleLb.textAlignment=NSTextAlignmentCenter; titleLb.font=[UIFont systemFontOfSize:20]; [naviView addSubview:titleLb]; //编辑按钮 UIButton *rightBtn=[[UIButton alloc]initWithFrame:CGRectMake(kWidth-60, 27, 40, 30)]; [rightBtn setTitle:@"编辑" forState:UIControlStateNormal]; [rightBtn setTitle:@"完成" forState:UIControlStateSelected]; [rightBtn addTarget:self action:@selector(editAction:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:rightBtn]; } //初始化数组 -(void)initDataArray { //初始化数据源数组 _dataArray=[NSMutableArray array]; [_dataArray addObject:[Model modelWithDesc:@"我的自选"]]; [_dataArray addObject:[Model modelWithDesc:@"我关注的牛股"]]; [_dataArray addObject:[Model modelWithDesc:@"环保牛股"]]; //初始化删除数组 _delArray=[NSMutableArray array]; } //点击编辑按钮执行的方法 -(void)editAction:(UIButton *)sender { [_tbView setEditing:!_tbView.isEditing animated:YES]; sender.selected=!sender.isSelected; if(sender.isSelected) { NSArray *allCells=[_tbView visibleCells]; for(CustomCell *cell in allCells) { cell.selectBtn.hidden=NO; cell.selectBtn.selected=NO; } //显示底部toolView [self showToolView]; } else { NSArray *allCells=[_tbView visibleCells]; for(CustomCell *cell in allCells) cell.selectBtn.hidden=YES; //隐藏底部toolView [self hideToolView]; //执行删除 [_dataArray removeObjectsInArray:_delArray]; //清空删除数组 [_delArray removeAllObjects]; //刷新表视图 [_tbView reloadData]; } } //表视图 -(void)createTbView { _tbView=[[UITableView alloc]initWithFrame:CGRectMake(0, 64, kWidth, kHeight-64)]; _tbView.delegate=self; _tbView.dataSource=self; _tbView.backgroundColor=[UIColor blackColor]; _tbView.separatorColor=[UIColor whiteColor]; _tbView.separatorStyle=UITableViewCellSeparatorStyleSingleLine; [self.view addSubview:_tbView]; _tbView.scrollEnabled=NO; _tbView.allowsSelectionDuringEditing=YES; _tbView.tableFooterView=[UIView new]; } //底部工具栏 -(void)createBottomTools { _toolView=[[UIView alloc]initWithFrame:CGRectMake(0, kHeight, kWidth, 49)]; _toolView.backgroundColor=[UIColor darkGrayColor]; [self.view addSubview:_toolView]; //全选按钮 UIButton *selectAllBtn=[[UIButton alloc]initWithFrame:CGRectMake(10, 14.5, 20, 20)]; [selectAllBtn setImage:[UIImage imageNamed:@"un_all_select"] forState:UIControlStateNormal]; [selectAllBtn setImage:[UIImage imageNamed:@"select"] forState:UIControlStateSelected]; [selectAllBtn addTarget:self action:@selector(selectAllRows:) forControlEvents:UIControlEventTouchUpInside]; selectAllBtn.tag=100; [_toolView addSubview:selectAllBtn]; //去选lb UILabel *selectAllLb=[[UILabel alloc]initWithFrame:CGRectMake(CGRectGetMaxX(selectAllBtn.frame)+5, 14.5, 40, 20)]; selectAllLb.textColor=[UIColor whiteColor]; selectAllLb.text=@"全选"; selectAllLb.textAlignment=NSTextAlignmentCenter; [_toolView addSubview:selectAllLb]; //删除数量 UILabel *deleteCountLb=[[UILabel alloc]initWithFrame:CGRectMake(kWidth-70, 14.5, 60, 20)]; deleteCountLb.text=@"删除(0)"; deleteCountLb.textAlignment=NSTextAlignmentCenter; deleteCountLb.textColor=[UIColor whiteColor]; deleteCountLb.tag=111; [_toolView addSubview:deleteCountLb]; //默认隐藏 _toolView.hidden=YES; } //全选 -(void)selectAllRows:(UIButton *)sender { sender.selected=!sender.isSelected; if(_delArray.count<_dataarray.count) {="" for(model="" *m="" in="" _dataarray)="" if(![_delarray="" containsobject:m])="" [_delarray="" addobject:m];="" }="" nsarray="" *allcells="[_tbView" visiblecells];="" for(customcell="" *cell="" allcells)="" cell.selectbtn.selected="YES;" else="" removeallobjects];="" [self="" refreshdeletecountlb];="" 显示工具栏="" -(void)showtoolview="" __weak="" typeof(self)="" weakself="self;" uilabel="" *deletecountlb="(UILabel" *)[self.toolview="" viewwithtag:111];="" deletecountlb.text="@"删除(0)";" self.toolview.hidden="NO;" 全选标记置为否="" uibutton="" *selectallbtn="(UIButton" viewwithtag:100];="" selectallbtn.selected="NO;" [uiview="" animatewithduration:0.3="" animations:^{="" cgfloat="" ypos="weakSelf.toolView.frame.origin.y;" weakself.toolview.frame="CGRectMake(0," ypos,="" kwidth,="" 49);="" }];="" 隐藏工具栏="" -(void)hidetoolview="" }completion:^(bool="" finished)="" weakself.toolview.hidden="YES;" 刷新删除数量lb="" -(void)refreshdeletecountlb="" stringwithformat:@"删除(%ld)",_delarray.count];="" #pragma="" mark="" -="" uitableview="" -(nsinteger)tableview:(uitableview="" *)tableview="" numberofrowsinsection:(nsinteger)section="" return="" _dataarray.count;="" -(cgfloat)tableview:(uitableview="" heightforrowatindexpath:(nsindexpath="" *)indexpath="" 40;="" -(uitableviewcell="" *)tableview:(uitableview="" cellforrowatindexpath:(nsindexpath="" static="" nsstring="" *cid="@"cid";" customcell="" *cel="[tableView" dequeuereusablecellwithidentifier:cid];="" if(!cel)="" cel="[[CustomCell" alloc]initwithstyle:uitableviewcellstyledefault="" reuseidentifier:cid];="" model="" *model="_dataArray[indexPath.row];" cel.titlelb.text="model.desc;" cel;="" 编辑样式="" -(uitableviewcelleditingstyle)tableview:(uitableview="" editingstyleforrowatindexpath:(nsindexpath="" uitableviewcelleditingstylenone;="" 移动="" -(void)tableview:(uitableview="" moverowatindexpath:(nsindexpath="" *)sourceindexpath="" toindexpath:(nsindexpath="" *)destinationindexpath="" 交换数据="" [_dataarray="" exchangeobjectatindex:sourceindexpath.row="" withobjectatindex:destinationindexpath.row];="" 选中时执行的逻辑="" didselectrowatindexpath:(nsindexpath="" if(_tbview.isediting)="" 若选择了所有行,则将全选标记置为是="" if(_delarray.count="=_dataArray.count)" 全选标记置为是="" *)[_tbview="" cellforrowatindexpath:indexpath];="" removeobject:m];="" 置为未选中="" 刷新删除数lb="" @end="" <="" pre=""> Appdelegate.m #import "AppDelegate.h" #import "EditViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { EditViewController *edit=[EditViewController new]; UINavigationController *navi=[[UINavigationController alloc]initWithRootViewController:edit]; navi.navigationBar.hidden=YES; navi.navigationBar.barStyle=UIBarStyleBlack; self.window.rootViewController=navi; return YES; }
最后附上GitHub源码地址