您的位置:首页 > 产品设计 > UI/UE

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

2015-11-20 21:08 721 查看
前言:

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


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

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

ButtonDelegate.h

#import <Foundation/Foundation.h>

@protocol ButtonDelegate <NSObject>

@required

/**
*  不含参数的事件监听方法
*/
-(void)delegateFunction;

@end


ButtonDelegateWithParameter.h

#import <Foundation/Foundation.h>

@protocol ButtonDelegateWithParameter <NSObject>

/**
*  含参数的事件监听方法
*/
-(void)delegateFunctionWithParameter:(id)parameter;

@end


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

HQButton.h

#import <UIKit/UIKit.h>
#import "ButtonDelegate.h"
#import "ButtonDelegateWithParameter.h"

@interface HQButton : UIButton

/** 代理 */
@property (nonatomic,weak)id<ButtonDelegate> delegate;

/** 含参数代理 */
@property (nonatomic,weak)id<ButtonDelegateWithParameter> delegateWithParamater;

@end


HQButton.m

#import "HQButton.h"

@implementation HQButton

/**
*  懒加载的使用,在需要监听代理的时候,所以只需要重写set方法,然后在set方法中实现加载delegate
*  亮点:就是重写set方法内部实现addTarget方法,监听self的func,然后在func内部调用delegate的实现协议的方法
*  @return void
*/
-(void)setDelegate:(id<ButtonDelegate>)delegate
{
[self addTarget:self action:@selector(func) forControlEvents:UIControlEventTouchUpInside];
_delegate = delegate;

}
-(void)setDelegateWithParamater:(id<ButtonDelegateWithParameter>)delegateWithParamater{
[self addTarget:self action:@selector(funcWithParameter:) forControlEvents:UIControlEventTouchUpInside];
_delegateWithParamater = delegateWithParamater;
}

-(void)func
 {
[self.delegate delegateFunction];
}
-(void)funcWithParameter:(id)parameter
 {
[self.delegateWithParamater delegateFunctionWithParameter:parameter];
}
@end


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

#import "ViewController.h"
#import "HQButton.h"

@interface ViewController ()<ButtonDelegate,ButtonDelegateWithParameter>

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];

//============创建自定义按钮================
HQButton* button = [[HQButton alloc] init];

//添加含参数的代理
button.delegateWithParamater = self;
//设置按钮的位置,背景颜色,显示文字
button.frame = CGRectMake(100, 100, 200, 100);
button.backgroundColor = [UIColor redColor];

//=============为按钮添加代理==============
//添加不含参数的代理
button.delegate = self;

//父控件添加这个按钮
[self.view addSubview:button];

}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];

}
//=============实现协议里的方法==============
-(void)delegateFunction{
NSLog(@"Hello");
}

-(void)delegateFunctionWithParameter:(id)parameter{
NSLog(@"self: %@",parameter);
}

@end


源代码百度云下载链接: http://pan.baidu.com/s/1mgIpuPy 密码: 89ww
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: