前言:好久没写博客,今天来一波。我在实际项目开发中,会遇到这样功能需求:我已经搭好了iOS的UI界面,但是很多界面的子View用了UIView,然后这些UIView中用了UILabel和UIImageView,然后接着需求要这些View能够有点击事件,比如一点击就跳转到某个控制器。一开始懵逼了,难道我还要把他们全部改成UIButton,但是UIButton不好添加子View,难道我还要全部自定义一下UIButton,就算自定义好了,在项目已经打好的界面还是要一个个替换,多麻烦。所以就想到通过UIView拓展类别,类别中的方法提供手势点击事件的监听,通过block传递事件任务。可是类别声明的属性没用,但是没关系,只好用上runtime运行时了。

代码如下:

UIView+AddClickedEvent.h

 //
// UIView+AddClickedEvent.h
// AddClickedEvent
//
// Created by HEYANG on 16/6/6.
// Copyright © 2016年 HeYang. All rights reserved.
//
// github:https://github.com/HeYang123456789
// blog :http://www.cnblogs.com/goodboy-heyang
// #import <UIKit/UIKit.h> @interface UIView (AddClickedEvent) - (void)addClickedBlock:(void(^)(id obj))tapAction; @end

UIView+AddClickedEvent.m

 //
// UIView+AddClickedEvent.m
// AddClickedEvent
//
// Created by HEYANG on 16/6/6.
// Copyright © 2016年 HeYang. All rights reserved.
//
// github:https://github.com/HeYang123456789
// blog :http://www.cnblogs.com/goodboy-heyang
// #import "UIView+AddClickedEvent.h"
#import <objc/message.h> @interface UIView () @property void(^clickedAction)(id); @end @implementation UIView (AddClickedEvent) - (void)setClickedAction:(void (^)(id))clickedAction{
objc_setAssociatedObject(self, @"AddClickedEvent", clickedAction, OBJC_ASSOCIATION_COPY_NONATOMIC);
} - (void (^)(id))clickedAction{
return objc_getAssociatedObject(self, @"AddClickedEvent");
} - (void)addClickedBlock:(void(^)(id obj))clickedAction{
self.clickedAction = clickedAction;
// hy:先判断当前是否有交互事件,如果没有的话。。。所有gesture的交互事件都会被添加进gestureRecognizers中
if (![self gestureRecognizers]) {
self.userInteractionEnabled = YES;
// hy:添加单击事件
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap)];
[self addGestureRecognizer:tap];
}
} - (void)tap{
if (self.clickedAction) {
self.clickedAction(self);
}
} @end

然后在Demo中实现这个效果,百度云链接: http://pan.baidu.com/s/1jHQkWMa 密码: waq8

最新文章

  1. [转]CSS如何设置html table表格边框样式
  2. JS的字符串处理
  3. VC++ 动态创建单个工具条,并加载外部的位图(bmp)文件为工具栏图像
  4. Flex 4 不同主题下容器子元素的管理方法
  5. 8051学习笔记——IIC与EEPROM实验
  6. 最全的JAVA源码整合下载
  7. JSON 解析器。JSON.stringify和JSON.parse
  8. Android实现 ScrollView + ListView无滚动条滚动
  9. 《html表格》
  10. bzoj2453
  11. Sql Server——查询(二)
  12. Xshell远程连接 与 Xftp文件传输
  13. 存根类(stub) 是什么意思?有什么作用?(转)
  14. linux查看主机最后启动时间
  15. 【代码笔记】iOS-获得现在的时间(2015-09-11)
  16. NGINX高并发配置
  17. 02: tornado进阶篇
  18. collection.toArray(new String[0])中new String[0]的作用
  19. Aircrack-ng无线破解总结
  20. 【转载】伪静态SQL注入

热门文章

  1. Linux - 修复Ubuntu错误“System program problem detected”
  2. 原生JS查找元素
  3. Autofac - 服务
  4. C#中是否可以继承String类
  5. 帝国cmsV6.6版数据表
  6. 微信开发中遇到“当前页面的url未注册”问题
  7. java for 的用法总结
  8. 头文件里面的ifndef /define/endif的作用
  9. UITextView 文本垂直居中
  10. 让禅道也可以玩BearyChat