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
- uitableviewcell编辑模式自定义左边的图片按钮
- 自定义UITableViewCell左滑显示编辑按钮
- UITableViewCell自定义右边的文字以及更改左边图片的大小
- iOS UITableViewCell (左滑删除按钮及编辑模式)
- UITableViewCell (左滑删除按钮及编辑模式)
- android 单选按钮 RadioButton 自定义图片左边距
- 自定义UITableViewCell上的delete按钮
- 自定义UITableViewCell上的delete按钮
- 自定义UITableViewCell上的delete按钮
- 自定义UITableViewCell上的delete按钮
- 自定义UITableViewCell上的delete按钮
- 自定义UITableViewCell上的删除按钮
- 自定义UITableViewCell上的delete按钮
- 自定义左边含有图片的EditText
- 更改UITableView左边编辑图片
- 自定义UITableViewCell上的图片文字
- 【Inno Setup】自定义右上角的图片和左边的图片
- Android button设置左边图片离按钮左边的距离,离文本的距离
- 项目开发计划模板
- 查看linux中某个端口(port)是否被占用
- Oracle之查询索引、索引列等信息
- vtk+vs2013+qt5
- ZigBee 3.0 《Base-Device-Behavior-Specification》--Network formation
- uitableviewcell编辑模式自定义左边的图片按钮
- C++ Primer Plus,Chapter11, excercise11.1
- 从零开始 React Native (2) ES6面向对象编程
- Linux环境上zlib1.2.8安装及配置
- tips
- 我为什么要开始写博客
- 建议proto文件按包名分子目录
- Android新特性之筛选菜单
- 一个JDK版本问题引发的思考--Java环境配置 && Eclipse的JDK配置