UIButton之Block回调
本文主要介绍了两种改写UIButton的点击事件方法——继承UIButton跟给UIButton添加一个分类。附代码
方法一:继承UIButton
UIButtonBlock.h文件 如下
#import <UIKit/UIKit.h>
typedef void (^ClickActionBlock) (id obj);
@interface UIButtonBlock : UIButton
@property (nonatomic,strong)ClickActionBlock caBlock;
- (void)initWithBlock:(ClickActionBlock)clickBlock for:(UIControlEvents)event;
@end
UIButtonBlock.m文件如下:
#import "UIButtonBlock.h"
@implementation UIButtonBlock
- (void)initWithBlock:(ClickActionBlock)clickActionBlock for:(UIControlEvents)event{
[self addTarget:self action:@selector(goAction:) forControlEvents:event];
self.caBlock = clickActionBlock;
}
- (void)goAction:(UIButton *)btn{
self.caBlock(btn);
}
附使用方法。。。。。我这里是用storyboard拖出来的按钮。首先要在storyboard里的Button关联这个UIButtonBlock这个类
然后就是使用:
……
[self.clickButton initWithBlock:^(id obj) {
NSLog(@"继承之UIButton============%@",obj);
} for:UIControlEventTouchUpInside];
有同学觉得多此一举,这里不作解释。
方法二:给UIButton添加一个分类
UIButton+Block.h文件如下
#import <UIKit/UIKit.h>
typedef void (^ClickActionBlock) (id obj);
@interface UIButton (Block)
- (void)initWithBlock:(ClickActionBlock)clickBlock for:(UIControlEvents)event;
@end
UIButton+Block.m文件如下
#import "UIButton+Block.h"
#import <objc/runtime.h>
static id key;
@implementation UIButton (Block)
- (void)initWithBlock:(ClickActionBlock)clickBlock for:(UIControlEvents)event{
objc_setAssociatedObject(self, &key, clickBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
[self addTarget:self action:@selector(goAction:) forControlEvents:event];
}
- (void)goAction:(UIButton *)sender{
ClickActionBlock block = (ClickActionBlock)objc_getAssociatedObject(self, &key);
if (block) {
block(sender);
}
}
使用方法:
……
[self.blockButton initWithBlock:^(id obj) {
NSLog(@"Runtime block============%@",obj);
} for:UIControlEventTouchUpInside ];
方法一:使用注意如果手写的UIButton需要在UIButtonBlock中再写一个初始化方法。如果是从xib拖出来的是需要关联的。
两种方法都实现了通过块来实现UIButton的addtarget方法中的@select方法的回调。代码比较粗糙大家将就着看着。
UIButton之Block回调的更多相关文章
- 第十篇、自定义UIBarButtonItem和UIButton block回调
// 自定义导航栏左边按钮 self.navigationItem.leftBarButtonItem = [JQBlockedBarButtonItem blockedBarButtonItemWi ...
- iOS很重要的 block回调
刚刚进入ios开发行业,发现开发中要用到大量的block回调,由此可见它的重要性.学习它之前我也是网上找的资料,推荐这篇文章http://blog.csdn.net/mobanchengshuang/ ...
- 63.delegate回调 和block回调
效果:viewController里面放置一个按钮和Lab,点击按钮进入oneViewController(delegate回调)或者BlockViewController(block回调),两者控制 ...
- iOS 键盘添加完成按钮,delegate和block回调
这个是一个比较初级一点的文章,新人可以看看.当然实现这个需求的时候自己也有一点收获,记下来吧. 前两天产品要求在工程的所有数字键盘弹出时,上面带一个小帽子,上面安装一个“完成”按钮,这个完成按钮也没有 ...
- Objective-C中的Block回调模式
在前面的博客中提到了Block的概念和使用方法,个人感觉Block最爽的用法莫过于在回调时用block.感觉比委托回调和目标方法回调用着要顺手,好不好用还得读者亲自用一下才知道.如果 读者之前用过SS ...
- Block回调
•Block的定义 •Block.委托.通知.回调函数,它们虽然名字不一样,但是原理都一样,都是"回调机制"的思想的具体实现 •前面的代理模式的项目改为Block回调实现 ...
- UIAlertController——之Block回调
iOS8.0之后出现的提示框 =.=,比自己去改block回调要好.
- 代码块(Block)回调一般阐述
本章教程主要对代码块回调模式进行讲解,已经分析其他回调的各种优缺点和适合的使用场景. 代码块机制 Block变量类型 Block代码封装及调用 Block变量对普通变量作用域的影响 Block回调接口 ...
- iOS开发-Block回调
关于Block之前有一篇文章已经写过一篇文章Object-C-代码块Block回顾,不过写的比较浅显,不能体现出Block在实际开发中的重要性,关于Block的基础知识,可以参考之前的博客.在实际开发 ...
随机推荐
- linux C中va_list用法
#include <stdio.h> #include <stdarg.h> int demo( int, ... ); int main( void ) { demo(1, ...
- 如何创建下拉列表为一个树列表?(此文为dev控件中,服务器控件暂不知,但想方法应该都差不多吧)
//前端控件代码:<dx:ASPxDropDownEdit ID="drop_treelist" runat="server" ClientInstanc ...
- JavaScript常用代码段
总结一下在各种地方看到的还有自己使用的一些实用代码 1)区分IE和非IE浏览器 if(!+[1,]){ alert("这是IE浏览器"); } else{ alert(" ...
- firefox chrome强制指定网址使用https
chrome强制网站使用httpschrome://net-internals/firefox强制指定网站使用https使用noScript插件
- JS跳转到顶部的方法
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>J ...
- php xml 互相转换
正好昨天才做过类似的需求……几行代码就可以搞定. 如果你使用 curl 获取的 xml data$xml = simplexml_load_string($data);$data['tk'] = js ...
- svn服务端配置
1.建立版本库 创建一个新的Subversion项目svnadmin create /var/www/svndata/njlrxx 配置允许用户jiqing访问cd /var/www/svndata/ ...
- 在Apache下发布ASP.NET程序
为什么要在apache下发布ASP.NET,看这篇文章您一定有自己的原因. 我是因为XP系统里面同时装IIS 和 AppServer会有问题. 步骤: 1.环境搭建,这个不废话,我安装的是.NET2. ...
- 二、搭建struts2的开发环境
二.搭建struts2的开发环境 下载地址:http://struts.apache.org 解压后的目录结构: apps:框架本身提供一些案例(学习) docs:框架本身提供的文档(指南和API). ...
- 单例模式(Winform窗体的实现)
在我的设计模式分类当中,我选择单例模式作为我第一个要写的设计模式,其一,单例模式简单.容易理解让人接受,其二,单例模式很常用,在实际的Winform窗体应用开发中能够带来更好的客户体验. 单例模式的核 ...