码迷,mamicode.com
首页 > 其他好文 > 详细

Runtime 实现 动态添加属性

时间:2016-11-15 19:54:24      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:char   selector   self   iat   ons   tar   oci   end   实现   

利用动态加载为对象添加一个 block 点击属性;

.h 文件

1 #import <UIKit/UIKit.h>
2 
3 @interface UIView (Tap)
4 /**
5  *  动态添加手势 
6  */
7 - (void)setTapActionWithBlock:(void (^)(void))block ;
8 @end

.m 文件

 1 #import "UIView+Tap.h"
 2 #import <objc/runtime.h>
 3 /**
 4  *  动态添加手势
 5  */
 6 static const char *ActionHandlerTapGestureKey;
 7 
 8 @implementation UIView (Tap)
 9 
10 - (void)setTapActionWithBlock:(void (^)(void))block {
11     
12     self.userInteractionEnabled = YES;
13     
14     UITapGestureRecognizer *gesture = objc_getAssociatedObject(self, &ActionHandlerTapGestureKey);
15     
16     if (!gesture) {
17         gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleActionForTapGesture:)];
18         [self addGestureRecognizer:gesture];
19         objc_setAssociatedObject(self, &ActionHandlerTapGestureKey, gesture, OBJC_ASSOCIATION_RETAIN);
20     }
21     
22     objc_setAssociatedObject(self, &ActionHandlerTapGestureKey, block, OBJC_ASSOCIATION_COPY);
23 }
24 
25 - (void)handleActionForTapGesture:(UITapGestureRecognizer *)gesture {
26     if (gesture.state == UIGestureRecognizerStateRecognized)  {
27         void(^action)(void) = objc_getAssociatedObject(self, &ActionHandlerTapGestureKey);
28         if (action)  {
29             action();
30         }
31     }
32 }
33 @end

 

Runtime 实现 动态添加属性

标签:char   selector   self   iat   ons   tar   oci   end   实现   

原文地址:http://www.cnblogs.com/guangleijia/p/6066628.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!