iOS 自定义Cell按钮的点击代理事件
在实际开发工作中,我们经常会在自定义的Cell中布局一些按钮,并且很多时候我们会在点击这个按钮的时候使我们的UItableviewController跳转到下一界面,有的可能还要传值。那么如何使我们的控制器能够获知我们按下了cell的按钮呢?毫无疑问,这是个代理模式的典型应用场景。
首先我们先得定义一个cell。.h文件如下:
- @protocol MycellDelegate <NSObject>
- @optional
- -(void)didClickButton:(UIButton *)button;
- @end
- @interface Mycell : UITableViewCell
- +(instancetype)cellWithtableView:(UITableView *)tableview;
- @property(nonatomic,strong)DateModel *model;
- @property(nonatomic,weak) id<MycellDelegate> delegate;
.m文件如下:
- #import "Mycell.h"
- @interface Mycell()
- @property(nonatomic,strong)UIButton *button;
- @end
- @implementation Mycell
- +(instancetype)cellWithtableView:(UITableView *)tableview
- {
- static NSString *ID = @"cell";
- Mycell *cell = [tableview dequeueReusableCellWithIdentifier:ID];
- if(!cell)
- {
- cell = [[Mycell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
- cell.selectionStyle = UITableViewCellSelectionStyleNone;
- cell.textLabel.font = [UIFont systemFontOfSize:13.0];
- }
- return cell;
- }
- //重写布局
- -(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
- {
- self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
- if(self)
- {
- self.button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, self.frame.size.height)];
- [self.button setTitle:@"我是按钮点我" forState:UIControlStateNormal];
- [self.button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
- self.button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;
- self.button.titleLabel.font = [UIFont systemFontOfSize:12.0];
- [self.contentView addSubview:self.button];
- [self.button addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
- }
- return self;
- }
- //给cell控件赋值
- -(void)setModel:(DateModel *)model
- {
- self.textLabel.text = [NSString stringWithFormat:@"日期:%@、信息:%@",model.date,model.message];
- }
- #pragma mark - 按钮点击事件,通过代理模式响应
- -(void)btnClick:(UIButton *)btn
- {
- [self.delegate didClickButton:btn];
- }
- @end
上述代码定义了一个代理,当按下按钮时,代理响应。
现在回到UItableviewController,代码如下:
- -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- Mycell *cell = [Mycell cellWithtableView:tableView];
- cell.model = self.Array[indexPath.row];
- cell.delegate = self;
- return cell;
- }
别忘了.delegate = self哦!代理执行的代码如下:
- #pragma mark - 代理事件
- //跳转到下一界面并传值
- -(void)didClickButton:(UIButton *)button
- {
- Mycell *cell = (Mycell *)button.superview.superview;
- NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
- MessageController *vc = [[MessageController alloc]init];
- DateModel *model = self.Array[indexPath.row];
- vc.message = [NSString stringWithFormat:@"行号:第%ld行,日期:%@、信息:%@",(long)indexPath.row,model.date,model.message];
- [self.navigationController pushViewController:vc animated:YES];
- }
当我们的cell中按钮点击后,将会自动跳到这个代理方法中,我们获取到按钮所在的cell,通过indexPathforCel这个方法(系统API)可以获取到cell的行数,并拿到数据源,此时想要传值给下一个界面就变的非常简单。
特别提醒:
当同一个工厂方法创建多行cell中的button时,要分别做处理的话需要分别对应cell的button添加tag,设置代理事件时,通过tag值来区分
iOS 自定义Cell按钮的点击代理事件相关推荐
- 纯CSS自定义button按钮的点击特效
纯css自定义button按钮的点击特效,实现背景变化 效果图如下: 代码如下: <!DOCTYPE html> <html> <head><meta cha ...
- iOS——自定义cell
iOS--自定义cell 在写自定义cell怎么实现之前,先来看一下自定义cell的作用和用法,这一点远远比怎么实现有用的多,在进行了两天的网易云仿写后,才发现自己对自定义cell的理解完全是错的,按 ...
- iOS 自定义返回按钮,保留系统滑动返回
1.简介 使用苹果手机,最喜欢的就是用它的滑动返回.作为一个开发者,我们在编写很多页面的时候,总是会因为这样那样的原因使得系统的滑动返回不可用.使用导航栏push出一个控制器,我们在控制器中自定义了一 ...
- iOS 自定义cell
思路 1.新建TAYTableViewCell 继承自UITableViewCell 2.添加需要使用的属性 3.写方法 4.应用 新建TAYTableViewCell 如图: 添加需要的属性 以一个 ...
- 高德地图去掉定位按钮_高德地图自定义定位按钮及点击事件
最近使用了一下高德地图,使用期间将出现的问题记录一下.文中出现不对的地方,悉听各路大神指正.2018年11月23日15:59:46 1.首先我们初始化map控制对象aMap .if (aMap ==n ...
- iOS 自定义cell【商品信息】 : 左侧为商品图片,右侧为商品名称,采购价,小计及数量等信息
前言 在做ERPapp或者电商app经常需要展示商品信息,本文以入库单详情为例子,具体效果如下: code 用法 V: cell的创建 case ERPStockInOrderDetailVSecti ...
- Android AOSP LatinIME输入法自定义图片按钮
文章目录 前言 一.引进图片按钮 二.添加映射 三.attrs.xml 四.KeyboardIconsSet.java 五.Constants.java 六.KeyboardCodesSet.java ...
- ios cell点击对勾_带图像和对勾的iOS自定义TableView
ios cell点击对勾 In this tutorial, we'll be developing an iOS Application that contains a custom TableVi ...
- ios开发返回按钮消失_iOS开发之自定义导航栏返回按钮右滑返回手势失效的解决...
我相信针对每一个iOS开发者来说~除了根视图控制器外~所有的界面通过导航栏push过去的界面都是可以通过右滑来返回上一个界面~其实~在很多应用和APP中~用户已经习惯了这个功能~然而~作为开发者的我们 ...
最新文章
- Facade模式——设计模式学习笔记
- start ssh-agent
- 泥浆配制_朝政泥浆——广西田阳县百东河水库溢洪道穿越钻泥浆配制简述(3)...
- 蓝桥杯 之 基础练习10:十进制转十六进制
- 利用ffmpeg进行摄像头提取视频编码为h264通过RTP发送数据到指定的rtp地址
- Coding Interview Guide -- 括号字符串的有效性和最长有效长度
- C++ Gui Qt4 书籍代码在VS2008上正确编译使用
- opencv_haartraining.exe 分类器训练----命令执行,执行项学习(1)
- Java 会被新兴语言取代吗?
- 快速非支配排序算法流程
- te40终端不设网关_默认网关不可用什么原因|默认网关不能用解决方法|默认网关怎么设置...
- Linux Ansible自动化运维 set_fact 模块
- 同花顺_代码解析_技术指标_Z_2
- 15张图详解四线制SPI通讯
- 3.6 创建和使用附件字段
- [转]gps中的广义和狭义相对论效应
- yarn和npm区别
- Vue.js 使用 vue-video-player 视频播放器(最全面)
- C#NetFrame3.5 JsonHelper
- android系统应用程序设置时间,Android应用程序设置系统时间的方法
热门文章
- Linux C 时间函数
- 解决HTML embed标签显示在div上层(not z-index)
- 机器学习:贝叶斯和优化方法_Facebook使用贝叶斯优化在机器学习模型中进行更好的实验
- 董明珠炮轰国产车的创始人不开自己生产的车,事实果真如此吗?
- 《草原安魂曲》《自由意志》及其他我喜欢的电影海报
- SystemVerilog声明的位置
- Fedora telnet配置
- python安装缺少api怎么办_请问缺少win32api模块该如何解决?
- oracle装了客户端怎么登陆账号,分享Oracle 11G Client 客户端安装步骤(图文详解)...
- 计算机七个计算原理,计算机组成原理计算题(7页)-原创力文档