Model.h
<pre>#import <Foundation/Foundation.h>
@interface Model : NSObject
@property(nonatomic,strong)NSString *desc;
+(instancetype)modelWithDesc:(NSString *)desc;
@end</pre>
Model.m
<pre>#import "Model.h"
@implementation Model
+(instancetype)modelWithDesc:(NSString *)desc
{
Model *m=[Model new];
m.desc=desc;
return m;
}
@end</pre>
CustomCell.h
<pre>#import <UIKit/UIKit.h>
@interface CustomCell : UITableViewCell
@property(nonatomic,strong)UILabel *titleLb;
@property(nonatomic,strong)UIButton *selectBtn;
@end</pre>
CustomCell.m
<pre>#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];
}
@end</pre>
EditViewController.h
<pre>#import <UIKit/UIKit.h>
@interface EditViewController : UIViewController
@end</pre>
EditViewController.m
<pre>#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 ()<UITableViewDataSource,UITableViewDelegate>
{
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 in allCells) cell.selectBtn.selected=YES;
}
else
{
[_delArray removeAllObjects];
NSArray *allCells=[_tbView visibleCells];
for(CustomCell *cell in allCells)
cell.selectBtn.selected=NO;
}
[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 *)[self.toolView viewWithTag:100];
selectAllBtn.selected=NO;
[UIView animateWithDuration:0.3 animations:^{
CGFloat ypos=weakSelf.toolView.frame.origin.y;
ypos=kHeight-49;
weakSelf.toolView.frame=CGRectMake(0, ypos, kWidth, 49);
}];
}
//隱藏工具欄
-(void)hideToolView
{
__weak typeof(self) weakSelf=self;
[UIView animateWithDuration:0.3 animations:^{
CGFloat ypos=weakSelf.toolView.frame.origin.y;
ypos=kHeight;
weakSelf.toolView.frame=CGRectMake(0, ypos, kWidth, 49);
}completion:^(BOOL finished) {
weakSelf.toolView.hidden=YES;
}];
}
//刷新刪除數量Lb
-(void)refreshDeleteCountLb
{
UILabel *deleteCountLb=(UILabel *)[self.toolView viewWithTag:111];
deleteCountLb.text=[NSString stringWithFormat:@"刪除(%ld)",_delArray.count];
}
pragma mark -
pragma mark - UITableView
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _dataArray.count;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 40;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
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;
return cel;
}
//編輯樣式
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleNone;
}
//移動
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
//交換數據
[_dataArray exchangeObjectAtIndex:sourceIndexPath.row withObjectAtIndex:destinationIndexPath.row];
}
//選中時執行的邏輯
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(_tbView.isEditing)
{
Model *m=_dataArray[indexPath.row];
if(![_delArray containsObject:m])
{
[_delArray addObject:m];
//若選擇了所有行,則將全選標記置為是
if(_delArray.count==_dataArray.count)
{
//全選標記置為是
UIButton *selectAllBtn=(UIButton *)[self.toolView viewWithTag:100];
selectAllBtn.selected=YES;
}
CustomCell *cell=(CustomCell *)[_tbView cellForRowAtIndexPath:indexPath];
cell.selectBtn.selected=YES;
}
else
{
[_delArray removeObject:m];
//全選標記置為否
UIButton *selectAllBtn=(UIButton *)[self.toolView viewWithTag:100];
selectAllBtn.selected=NO;
//置為未選中
CustomCell *cell=(CustomCell *)[_tbView cellForRowAtIndexPath:indexPath];
cell.selectBtn.selected=NO;
}
//刷新刪除數Lb
[self refreshDeleteCountLb];
}
}
@end
</pre>
Appdelegate.m
<pre>
#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;
}</pre>
<pre>
最后附上GitHub源碼地址
</pre>