首先我们先看一下今天要做的一个效果图:
我们要实现编辑模式,cell向右移动,展现出删除按钮。
在网上找了好久,没找到解决方法,网上都是修改多选模式下的图片,理论其实无非就是便利底层cell,找出多选的imageview然后更换图片。要实现我们这个效果,最简单的就是在添加模式下,找出imageview。但是现实告诉我,是不可能的。所以只有自己定义了。
首先,我们在tableview里面实现点击进入编辑模式:
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor=JyColor(240, 239, 249, 1);
self.navigationItem.title=@"定时开关";
self.navigationItem.rightBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"编辑" style:UIBarButtonItemStyleDone target:self action:@selector(rightbarbtnclick:)];
[self setupsubviews];
}
-(void)rightbarbtnclick:(UIBarButtonItem *)btn
{
if ([btn.title isEqualToString:@"编辑"]) {
}else{
}
self.tableview.editing=!self.tableview.editing;
btn.title=[btn.title isEqualToString:@"编辑"]?@"取消":@"编辑";
}
-(void)setupsubviews
{
UITableView *tableview=[[UITableView alloc]init];
tableview.backgroundColor=JyColor(240, 239, 249, 1);
self.tableview=tableview;
[self.tableview setTableFooterView:[[UIView alloc]initWithFrame:CGRectZero]];
[self.view addSubview:tableview];
tableview.delegate=self;
tableview.dataSource=self;
tableview.translatesAutoresizingMaskIntoConstraints=NO;
[tableview autoPinEdgeToSuperviewEdge:ALEdgeLeading];
[tableview autoPinEdgeToSuperviewEdge:ALEdgeTrailing];
[tableview autoPinEdgeToSuperviewEdge:ALEdgeTop];
[tableview autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:115];
// self.tableview.allowsMultipleSelectionDuringEditing = YES;
UIButton *addbtn=[[UIButton alloc]init];
addbtn.backgroundColor=[UIColor blueColor];
[self.view addSubview:addbtn];
[addbtn autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:tableview withOffset:10];
[addbtn autoSetDimension:ALDimensionWidth toSize:50];
[addbtn autoSetDimension:ALDimensionHeight toSize:50];
[addbtn autoAlignAxisToSuperviewAxis:ALAxisVertical];
}
接着我们开始搭建cell模型和model模型
TimeSwitchModel.h文件:
#import <Foundation/Foundation.h>
@interface TimeSwitchModel : NSObject
@property (nonatomic,copy)NSString *idstr;
@property (nonatomic,copy)NSString *namestr;
@property (nonatomic,copy)NSString *datastr;
@end
TimeSwitchCell.h文件
#import <UIKit/UIKit.h>
@class TimeSwitchModel;
@interface TimeSwitchCell : UITableViewCell
@property(nonatomic,strong)TimeSwitchModel *model;
@property(nonatomic,copy) void(^deleteclick)(NSString *);
@end
TimeSwitchCell.m文件
#import "TimeSwitchCell.h"
#import "TimeSwitchModel.h"
@interface TimeSwitchCell()
{
UIImageView *_headpicImageview;
UILabel *_namelabel;
UILabel *_datelabel;
UIButton *_deletebtn;
}
@end
@implementation TimeSwitchCell
- (void)awakeFromNib {
}
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
[self initView];
}
return self;
}
-(void)initView
{
_headpicImageview=[[UIImageView alloc]init];
[self.contentView addSubview:_headpicImageview];
_deletebtn=[UIButton buttonWithType:UIButtonTypeCustom];
[self.contentView addSubview:_deletebtn];
_namelabel=[[UILabel alloc]init];
[self.contentView addSubview:_namelabel];
_datelabel=[[UILabel alloc]init];
[self.contentView addSubview:_datelabel];
}
-(void)setModel:(TimeSwitchModel *)model
{
_model=model;
_deletebtn.frame=CGRectMake(-79, 0, 79, 80);
[_deletebtn setImage:[UIImage imageNamed:@"delete_icon.png"] forState:UIControlStateNormal];
[_deletebtn setImage:[UIImage imageNamed:@"delete_highlight_icon.png"] forState:UIControlStateHighlighted];
[_deletebtn addTarget:self action:@selector(deletebtnclick:) forControlEvents:UIControlEventTouchUpInside];
_headpicImageview.image=[UIImage imageNamed:@"timeswich_head_icon.png"];
_headpicImageview.frame=CGRectMake(8, 12, 56, 56);
_namelabel.font=[UIFont systemFontOfSize:17];
_namelabel.textColor=JyColor(109, 109, 109, 1);
_namelabel.frame=CGRectMake(72, 16, 300, 30);
_namelabel.text=model.namestr;
_datelabel.font=[UIFont systemFontOfSize:15];
_datelabel.textColor=JyColor(255, 128, 3, 1);
_datelabel.frame=CGRectMake(72, 50, 300, 30);
_datelabel.text=model.datastr;
}
-(void)deletebtnclick:(UIButton *)idstr
{
if (self.deleteclick) {
self.deleteclick(_model.idstr);
}
}
-(void) setEditing:(BOOL)editing animated:(BOOL)animated{
if (self.editing == editing)
{
return;
}
[super setEditing:editing animated:animated];
//
CGFloat moveSpace = 79-38;//cell的编辑模式会帮你自动移动38 所以我们要继续移动79-38
if (self.editing)
{
[_headpicImageview setFrame:CGRectMake(_headpicImageview.frame.origin.x + moveSpace, _headpicImageview.frame.origin.y, _headpicImageview.frame.size.width, _headpicImageview.frame.size.height)];
[_deletebtn setFrame:CGRectMake(_deletebtn.frame.origin.x + moveSpace, _deletebtn.frame.origin.y, _deletebtn.frame.size.width, _deletebtn.frame.size.height)];
[_namelabel setFrame:CGRectMake(_namelabel.frame.origin.x + moveSpace, _namelabel.frame.origin.y, _namelabel.frame.size.width, _namelabel.frame.size.height)];
[_datelabel setFrame:CGRectMake(_datelabel.frame.origin.x + moveSpace, _datelabel.frame.origin.y, _datelabel.frame.size.width, _datelabel.frame.size.height)];
}else
{
[_headpicImageview setFrame:CGRectMake(_headpicImageview.frame.origin.x - moveSpace, _headpicImageview.frame.origin.y, _headpicImageview.frame.size.width, _headpicImageview.frame.size.height)];
[_deletebtn setFrame:CGRectMake(_deletebtn.frame.origin.x - moveSpace, _deletebtn.frame.origin.y, _deletebtn.frame.size.width, _deletebtn.frame.size.height)];
[_namelabel setFrame:CGRectMake(_namelabel.frame.origin.x - moveSpace, _namelabel.frame.origin.y, _namelabel.frame.size.width, _namelabel.frame.size.height)];
[_datelabel setFrame:CGRectMake(_datelabel.frame.origin.x - moveSpace, _datelabel.frame.origin.y, _datelabel.frame.size.width, _datelabel.frame.size.height)];
}
}
在uitableviw里面 我们用一个block传入我们点击了哪个cell的模型id
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier=@"timewsitch";
TimeSwitchCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell==nil) {
cell=[[TimeSwitchCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
TimeSwitchModel *model=[[TimeSwitchModel alloc]init];
model.idstr=[@"000" stringByAppendingString:[NSString stringWithFormat:@"%ld",(long)indexPath.row]];
model.namestr=@"这里是产品的名字";
model.datastr=@"2017/01/24";
cell.model=model;
cell.deleteclick=^(NSString * idstr){
NSLog(@"—idstr是:%@",idstr);
};
return cell;
}
ok,运行一下,看看效果: