【iOS开发技术】Block的使用(二)
来源:互联网 发布:南京市网络问政平台 编辑:程序博客网 时间:2024/06/06 04:03
前言
在看这篇文章之前希望大家先看一下我另外一片文章,Block的使用(一) 还有一篇 对象关联 这两篇文章。
PS:XD虽然写的不好随便看看呐~
接下来我就结合这两篇文章给大家演示一个我前端时间看到的一个比较新颖的东西吧。
PS:高手勿喷啊,新手表示这个还是挺新奇的。
简介
这里我结合一个按钮、Block、以及objc_setAssociatedObject(关联对象)三个东西给大家。
引语
Button的每个事件我们都是通过 addTarget: action: forControlEvents: 去指定的,这样我们的方法体就需要另外写,虽然说没什么问题。但是我总觉得我阅读起来要上下翻动令我很不舒服。
所以我就想,有没有办法让按钮的点击调用一个Block呢?
PS:XD既然我写了这篇文章那肯定有啦。哈哈...
正文
好了废话不多了。
[Button addTarget:self action:@(要执行的SEL) forControlEvents:UIControlEvents];
原本我们的代码需要酱紫写,才可以给一个按钮添加一个事件。
问题就是我每次都要去找那个SEL=- = 出于学习目的,我们把它改为Block形式好了
接下来看一段我写的代码吧
UIButton * b=[UIButton buttonWithType:UIButtonTypeSystem];[btn setFrame:CGRectMake(50, 50, 100, 100)];[btn setTitle:@"按钮B" forState:UIControlStateNormal];[btn addBlockEventWithEvent:UIControlEventTouchUpInside withBlock:^{ NSLog(@"b按钮被点击了");}];
这段代码看上去就很简单了!应该不需要我多做解释了。XD
主要看一下实现吧
先看我的代码结构吧=- = 就是酱紫的。
那我们来看两个文件的具体实现吧=- =
UIButton+Block.h
#import <Foundation/Foundation.h>#import <objc/runtime.h>typedef void (^ActionBlock)();@interface UIButton(Block)@property (readonly) NSMutableDictionary *event;- (void) addBlockEventWithEvent:(UIControlEvents)controlEvent withBlock:(ActionBlock)action;@end
UIButton+Block.m
#import "UIButton+Block.h"@implementation UIButton(Block)static char overviewKey;@dynamic event;- (void)addBlockEventWithEvent:(UIControlEvents)event withBlock:(ActionBlock)block { objc_setAssociatedObject(self, &overviewKey, block, OBJC_ASSOCIATION_COPY_NONATOMIC); [self addTarget:self action:@selector(callActionBlock:) forControlEvents:event];}- (void)callActionBlock:(id)sender { ActionBlock block = (ActionBlock)objc_getAssociatedObject(self, &overviewKey); if (block) { block(); }}@end
这两段代码其实很容易理解。
主要就是我建了一个方法,然后在这个方法里面把传递的block关联到当前的button上面,酱紫按钮销毁了这个block也会跟着销毁
然后在点击事件执行当前按钮里面关联的block
XD其实我觉得这个代码太简单了,貌似没什么好说的了...
总结
从这个使用方法上我们可以有很多中延伸,比如在AlertView...等等
可以自己去实验,嘿嘿,我也是第一次搞。XD
猛击这里下载示例代码 XD ☞ButtonBlock.zip☜
0 0
- 【iOS开发技术】Block的使用(二)
- 【iOS开发技术】Block的使用(一)
- iOS 之 Block 的使用 (二)
- iOS开发--Block的使用
- iOS开发 - Block块的使用(二)内存管理和特性
- iOS开发block(二)
- iOS开发之block(二)
- IOS(二)块语法block 的理解与使用
- IOS Block 代码块使用 (二)
- iOS开发-(^)代码块(block)的使用
- iOS开发 - Block块的使用(一)基础概念
- iOS开发 block的简单使用
- iOS开发中Block的使用
- 【iOS开发系列】block的使用
- IOS开发之block的使用
- iOS开发中block的使用
- iOS开发之block的使用
- iOS开发 - Block块的使用(三)在iOS开发中的使用
- 谷歌浏览器如何设置为无图模式
- 【iOS开发技术】将iOS6 原生Navigtaion和Tab 修改的接近iOS7的样式
- 用栈实现计算器
- JSP
- 【iOS开发技术】Block的使用(一)
- 【iOS开发技术】Block的使用(二)
- PHP开发环境搭建
- Codeforces 453A Little Pony and Expected Maximum
- 【iOS开发技术】NSPredicate谓词的用法 数组过滤
- svn报错
- Display XML in a javadoc
- hdu 1060 leftmost
- 迷你播放器--综述
- 病狗问题以及帽子颜色那个题