编程技巧 - 关联+Block
来源:互联网 发布:linux net snmp使用 编辑:程序博客网 时间:2024/06/05 09:04
转载于:http://www.cocoachina.com/ios/20141105/10134.html
#pragma mark - LBRuntimeView.@interface LBRuntimeView : UIView- (void)setTapActionWithBlock:(void(^)(void))block;@end
实现:
#pragma mark - LBRuntimeView.static char kDTActionHandlerTapGestureKey;@interface LBRuntimeView ()@end@implementation LBRuntimeView- (void)setTapActionWithBlock:(void(^)(void))block{ UITapGestureRecognizer *gesture = objc_getAssociatedObject(self, &kDTActionHandlerTapGestureKey); if (!gesture) { gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(__handleActionForTapGesture:)]; [self addGestureRecognizer:gesture]; objc_setAssociatedObject(self, &kDTActionHandlerTapGestureKey, gesture, OBJC_ASSOCIATION_RETAIN); } objc_setAssociatedObject(self, &kDTActionHandlerTapGestureKey, block, OBJC_ASSOCIATION_COPY);}// 这样的结构超帅的哦,static char是一个全局的// 这样才能起到连结的作用嘛- (void)__handleActionForTapGesture:(UITapGestureRecognizer *)gesture{ if (gesture.state == UIGestureRecognizerStateEnded) { void(^action)(void) = objc_getAssociatedObject(self, &kDTActionHandlerTapGestureKey); if (action) { action(); } }}@end
调用:
__weak LBRuntimeView *blockView = runtimeView; [runtimeView setTapActionWithBlock:^{ [blockView setBackgroundColor: [UIColor colorWithRed:arc4random_uniform(255)/255.0 green:arc4random_uniform(255)/255.0 blue:arc4random_uniform(255)/255.0 alpha:1]]; }];
几乎所有的类结构都可以这样 关联 + block来达到这种效果。
这样,可以动态增强类的功能,并且灵活使用。
0 0
- 编程技巧 - 关联+Block
- 编程技巧 - block
- Block 编程
- Block编程
- Android 编程技巧之 ----- Android Studio 关联任意版本源码
- block与GCD关联使用
- block使用技巧
- block 使用技巧
- Block 的小技巧
- 四个 block 小技巧
- Enterprise Library 2.0 技巧(4):如何用编程的方法来配置Logging Application Block
- LR关联技巧讲解
- block 滑块导航条 关联
- IOS block编程注意事项
- IOS-Block编程
- IOS-Block编程
- IOS block编程注意事项
- IOS 之Block编程
- HTML5 表单属性
- Echarts报表初体验
- Clone KVM with virt-clone
- 开源利器
- LeetCode Algorithms #102 <Binary Tree Level Order Traversal>
- 编程技巧 - 关联+Block
- 欢迎使用CSDN-markdown编辑器
- 初试Android的MVP框架
- CocoaPods使用详解
- 一、go语言基础流程控制,语法,反射特性--go语言笔记
- Java学习之路1--hello world
- JSP中为何内置对象——JSP中九个内置对象使用总结
- can总线驱动安装方法
- ACM算法分类