example
static NSString *key;
static NSString *blockKey;
static NSString *clickkey;
- (void)viewDidLoad {
[super viewDidLoad];
[self showDetailText];
[self addClass];
[self initUI];
void(^action)(void)=^(){
NSLog(@"block");
};
[self setTapActionWithBlock:action];
}
//关联对象
-(void)setTapActionWithBlock:(void(^)(void))block{
//获取关联对象
UITapGestureRecognizer *gesture=objc_getAssociatedObject(self, &key);
if (!gesture) {
gesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handActionForTapGesture:)];
[self.view addGestureRecognizer:gesture];
//设置手势关联对象
objc_setAssociatedObject(self, &key, gesture,OBJC_ASSOCIATION_RETAIN);
}
//设置相应手势关联对象
objc_setAssociatedObject(self, &blockKey, block, OBJC_ASSOCIATION_COPY);
}
//响应手势
-(void)handActionForTapGesture:(UIGestureRecognizer *)gesture{
//获取关联对象,并从中取出block
void(^action)(void)=objc_getAssociatedObject(self, &blockKey);
if (action) {
//执行block
action();
}
//
// if (gesture.state==UIGestureRecognizerStateBegan) {
//
// //获取关联对象,并从中取出block
// void(^action)(void)=objc_getAssociatedObject(self, &blockKey);
//
// if (action) {
// //执行block
// action();
// }
// }
}
-(void)initUI{
UIButton *click=[[UIButton alloc]initWithFrame:CGRectMake(0, 64, 200, 200)];
click.backgroundColor=[UIColor orangeColor];
[click setTitle:@"关联对象" forState:UIControlStateNormal];
[click addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
//设置关联对象
objc_setAssociatedObject(self, &clickkey, @"hello", OBJC_ASSOCIATION_RETAIN);
[self.view addSubview:click];
}
-(void)click:(UIButton *)btn{
//获取关联对象
NSString *str=objc_getAssociatedObject(self, &clickkey);
NSLog(@"关联对象的值是%@",str);
}