zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

IOS之UI--自定义按钮实现代理监听点击事件

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
复制代码