博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS之UI--自定义按钮实现代理监听点击事件
阅读量:6321 次
发布时间:2019-06-22

本文共 3115 字,大约阅读时间需要 10 分钟。

hot3.png

前言:

Objective-C提供的按钮监听事件的方法是    不含参数的监听方法    [button实例对象 addTarget:self action:@selector(func) forControlEvents:UIControlEventTouchUpInside];    含参数的监听方法    [button实例对象 addTarget:self action:@selector(func:) forControlEvents:UIControlEventTouchUpInside];下面通过代理的方式,将这两个监听事件的方法在自定义UIButton中封装起来,然后使用的时候,就类似Java的事件监听。

自定义按钮实现代理监听点击事件

因为有两种不同的监听方法,一个不含参数,一个含参数,所以最好用两个代理协议来处理,一个协议一个行为业务方法:

ButtonDelegate.h

1 #import 
2 3 @protocol ButtonDelegate
4 5 @required 6 7 /** 8 * 不含参数的事件监听方法 9 */10 -(void)delegateFunction;11 12 13 @end

ButtonDelegateWithParameter.h

1 #import 
2 3 @protocol ButtonDelegateWithParameter
4 5 6 /** 7 * 含参数的事件监听方法 8 */ 9 -(void)delegateFunctionWithParameter:(id)parameter;10 11 @end

然后自定义UIbutton,并在自定义UIbutton中组合两个对应的代理delegate的引用。

HQButton.h

1 #import 
2 #import "ButtonDelegate.h" 3 #import "ButtonDelegateWithParameter.h" 4 5 @interface HQButton : UIButton 6 7 /** 代理 */ 8 @property (nonatomic,weak)id
delegate; 9 10 /** 含参数代理 */11 @property (nonatomic,weak)id
delegateWithParamater;12 13 @end

HQButton.m

1 #import "HQButton.h" 2  3 @implementation HQButton 4  5 /** 6  *  懒加载的使用,在需要监听代理的时候,所以只需要重写set方法,然后在set方法中实现加载delegate 7  *  亮点:就是重写set方法内部实现addTarget方法,监听self的func,然后在func内部调用delegate的实现协议的方法 8  *  @return void 9  */10 -(void)setDelegate:(id
)delegate11 {12 [self addTarget:self action:@selector(func) forControlEvents:UIControlEventTouchUpInside];13 _delegate = delegate;14 15 }16 -(void)setDelegateWithParamater:(id
)delegateWithParamater{17 [self addTarget:self action:@selector(funcWithParameter:) forControlEvents:UIControlEventTouchUpInside];18 _delegateWithParamater = delegateWithParamater;19 }20 21 -(void)func 22 {23 [self.delegate delegateFunction];24 }25 -(void)funcWithParameter:(id)parameter 26 {27 [self.delegateWithParamater delegateFunctionWithParameter:parameter];28 }29 @end

在ViewController中实现相关的协议,然后使用这个自定义button然后添加delegate。

1 #import "ViewController.h" 2 #import "HQButton.h" 3  4 @interface ViewController ()
5 6 @end 7 8 @implementation ViewController 9 10 - (void)viewDidLoad {11 [super viewDidLoad];12 13 //============创建自定义按钮================14 HQButton* button = [[HQButton alloc] init];15 16 //添加含参数的代理17 button.delegateWithParamater = self;18 //设置按钮的位置,背景颜色,显示文字19 button.frame = CGRectMake(100, 100, 200, 100);20 button.backgroundColor = [UIColor redColor];21 22 //=============为按钮添加代理==============23 //添加不含参数的代理24 button.delegate = self; 25 26 //父控件添加这个按钮27 [self.view addSubview:button];28 29 }30 31 - (void)didReceiveMemoryWarning {32 [super didReceiveMemoryWarning];33 34 }35 //=============实现协议里的方法==============36 -(void)delegateFunction{37 NSLog(@"Hello");38 }39 40 -(void)delegateFunctionWithParameter:(id)parameter{41 NSLog(@"self: %@",parameter);42 }43 44 @end

源代码百度云下载链接: 密码: 89ww

 
 
 
 
 

转载于:https://my.oschina.net/u/2363463/blog/635818

你可能感兴趣的文章
Oracle 提高查询性能(基础)
查看>>
学习知识应该像织网一样去学习——“网状学习法”
查看>>
Hadoop集群完全分布式安装
查看>>
QString,char,string之间赋值
查看>>
我的友情链接
查看>>
Nginx+mysql+php-fpm负载均衡配置实例
查看>>
MySql之基于ssl安全连接的主从复制
查看>>
informix的逻辑日志和物理日志分析
查看>>
VMware.Workstation Linux与windows实现文件夹共享
查看>>
ARM inlinehook小结
查看>>
wordpress admin https + nginx反向代理配置
查看>>
管理/var/spool/clientmqueue/下的大文件
查看>>
mysql dba系统学习(20)mysql存储引擎MyISAM
查看>>
centos 5.5 64 php imagick 模块错误处理记录
查看>>
apache中文url日志分析--php十六进制字符串转换
查看>>
浅谈代理
查看>>
基于jquery实现的超酷动画源码
查看>>
fl包下的TransitionManager的使用
查看>>
Factorialize a Number
查看>>
防HTTP慢速攻击的nginx安全配置
查看>>