IOS之UI--自定义按钮实现代理监听点击事件
2023-09-14 08:57:57 时间
不含参数的监听方法
[button实例对象 addTarget:self action:@selector(func) forControlEvents:UIControlEventTouchUpInside];
含参数的监听方法
[button实例对象 addTarget:self action:@selector(func:) forControlEvents:UIControlEventTouchUpInside];
下面通过代理的方式,将这两个监听事件的方法在自定义UIButton中封装起来,然后使用的时候,就类似Java的事件监听。
自定义按钮实现代理监听点击事件
因为有两种不同的监听方法,一个不含参数,一个含参数,所以最好用两个代理协议来处理,一个协议一个行为业务方法:
ButtonDelegate.h
1 #import Foundation/Foundation.h 3 @protocol ButtonDelegate NSObject 5 @required 7 /** 8 * 不含参数的事件监听方法 9 */ 10 -(void)delegateFunction; 13 @end
ButtonDelegateWithParameter.h
1 #import Foundation/Foundation.h 3 @protocol ButtonDelegateWithParameter NSObject 6 /** 7 * 含参数的事件监听方法 8 */ 9 -(void)delegateFunctionWithParameter:(id)parameter; 11 @end
然后自定义UIbutton,并在自定义UIbutton中组合两个对应的代理delegate的引用。
HQButton.h
1 #import UIKit/UIKit.h 2 #import "ButtonDelegate.h" 3 #import "ButtonDelegateWithParameter.h" 5 @interface HQButton : UIButton 7 /** 代理 */ 8 @property (nonatomic,weak)id ButtonDelegate delegate; 10 /** 含参数代理 */ 11 @property (nonatomic,weak)id ButtonDelegateWithParameter delegateWithParamater; 13 @end
HQButton.m
1 #import "HQButton.h" 3 @implementation HQButton 5 /** 6 * 懒加载的使用,在需要监听代理的时候,所以只需要重写set方法,然后在set方法中实现加载delegate 7 * 亮点:就是重写set方法内部实现addTarget方法,监听self的func,然后在func内部调用delegate的实现协议的方法 8 * @return void 9 */ 10 -(void)setDelegate:(id ButtonDelegate )delegate 12 [self addTarget:self action:@selector(func) forControlEvents:UIControlEventTouchUpInside]; 13 _delegate = delegate; 16 -(void)setDelegateWithParamater:(id ButtonDelegateWithParameter )delegateWithParamater{ 17 [self addTarget:self action:@selector(funcWithParameter:) forControlEvents:UIControlEventTouchUpInside]; 18 _delegateWithParamater = delegateWithParamater; 21 -(void)func 23 [self.delegate delegateFunction]; 25 -(void)funcWithParameter:(id)parameter 27 [self.delegateWithParamater delegateFunctionWithParameter:parameter]; 29 @end
在ViewController中实现相关的协议,然后使用这个自定义button然后添加delegate。
1 #import "ViewController.h" 2 #import "HQButton.h" 4 @interface ViewController () ButtonDelegate,ButtonDelegateWithParameter 6 @end 8 @implementation ViewController 10 - (void)viewDidLoad { 11 [super viewDidLoad]; 13 //============创建自定义按钮================ 14 HQButton* button = [[HQButton alloc] init]; 16 //添加含参数的代理 17 button.delegateWithParamater = self; 18 //设置按钮的位置,背景颜色,显示文字 19 button.frame = CGRectMake(100, 100, 200, 100); 20 button.backgroundColor = [UIColor redColor]; 22 //=============为按钮添加代理============== 23 //添加不含参数的代理 24 button.delegate = self; 26 //父控件添加这个按钮 27 [self.view addSubview:button]; 31 - (void)didReceiveMemoryWarning { 32 [super didReceiveMemoryWarning]; 35 //=============实现协议里的方法============== 36 -(void)delegateFunction{ 37 NSLog(@"Hello"); 40 -(void)delegateFunctionWithParameter:(id)parameter{ 41 NSLog(@"self: %@",parameter); 44 @end
相关文章
- IOS开发之显示微博表情
- IOS开发之自动布局--VFL语言
- iOS设计模式 - 观察者
- ios获取系统当前日期,一定日期格式的代码
- iOS开发的22个奇谲巧技
- ios开发真机测试证书申请
- IOS学习资源收集--关于动画的代码学习资源总汇(很棒的动画效果哦)
- iOS开发UI篇—UITableview控件简单介绍
- iOS开发UI篇—ios应用数据存储方式(归档)
- iOS开发UI篇—ios应用数据存储方式(偏好设置)
- iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist)
- iOS常用第三方库之Masonry
- 【IOS-COCOS2D(2.X) 游戏开发之一】自定义CCSPRITE中-(ID) INIT 重写需注意& 2.X版本中注册触屏事件代码&简述COCOS2D/X/UNITY3D引擎使用感想!
- iOS中 简单易懂的秒杀倒计时/倒计时
- ios swift string和charecters互转 int string 和 bytes [UInt8]互转
- iOS 事件传递和响应链
- iOS 即时通讯
- 安卓和 ios滚动事件的差异