IOS之UI--自定义按钮实现代理监听点击事件
2015-11-20 21:08
721 查看
前言:
ButtonDelegate.h
ButtonDelegateWithParameter.h
然后自定义UIbutton,并在自定义UIbutton中组合两个对应的代理delegate的引用。
HQButton.h
HQButton.m
在ViewController中实现相关的协议,然后使用这个自定义button然后添加delegate。
源代码百度云下载链接: http://pan.baidu.com/s/1mgIpuPy 密码: 89ww
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
相关文章推荐
- PyQt4(使用ui)
- 注解(浅谈Dagger,ButterKnife,Roboguide)
- APUE学习笔记——标准I/O
- UIDatePicker 日期滚轮)/时间选取器
- 提高Interface Builder高效工作的8个技巧
- UIImagePickerController 的部分用法详解
- leetcode-implement-queue-using-stacks
- iOS中UIMenuController的使用
- UIScrollView与UIPageControl+自动滑动的封装
- ios UILocalNotification的使用
- Qt .ui转换为.h文件
- STL容器-序列式容器deque
- Android——使用Handle和Message更新UI控件
- iOS开发中UIViewcontentMode的12种属性值
- ios的手势UIGestureRecognizer
- Android中UI线程与后台线程交互设计的5种方法
- 【iOS功能实现】之利用UIDocumentInteractionController打开和预览文档
- Leetcode: Binary Tree Longest Consecutive Sequence
- openstack message queue
- UILable上如何添加背景图片