zoukankan      html  css  js  c++  java
  • Runtime 实现 动态添加属性

    利用动态加载为对象添加一个 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
  • 相关阅读:
    spring三大框架整合
    spring基础内容
    安装Apache报80端口被占用 pid 4
    Bugzilla说明
    管理员权限的用户
    mac怎么连接windows远程桌面
    java化测试神器-流量回放平台
    PyAutoGUI——图形用户界面自动化
    (Python OpenGL)【5】平移 PyOpenGL
    (Python OpenGL)【4】Uniform变量 PyOpenGL
  • 原文地址:https://www.cnblogs.com/guangleijia/p/6066628.html
Copyright © 2011-2022 走看看