uitableviewcell编辑模式自定义左边的图片按钮

来源:互联网 发布:考单片机的高级证书 编辑:程序博客网 时间:2024/06/05 09:22

首先我们先看一下今天要做的一个效果图:
这里写图片描述
这里写图片描述

我们要实现编辑模式,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,运行一下,看看效果:

这里写图片描述

这里写图片描述

这里写图片描述

0 0
原创粉丝点击