IOS开发之功能模块--给任意的UIView添加点击事件
前言:好久没写博客,今天来一波。我在实际项目开发中,会遇到这样功能需求:我已经搭好了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
IOS开发之功能模块--给任意的UIView添加点击事件的更多相关文章
- iOS开发之功能模块--用runtime给UIView类别拓展PressMenu工具
这是个很有用的列别工具类,在聊天对话框添加和QQ一样的"复制.粘贴.取消"等选项,而且使用起来很方便,只要找到聊天泡泡内部的某个View,比如Label或者背景冒泡的UIImage ...
- iOS开发之功能模块--高仿Boss直聘的常用语的开发
首先上Boss直聘的功能界面截图,至于交互请读者现在Boss直聘去交互体验: 本人的公司项目要高仿Boss直聘的IM常用语的交互功能,居然花费了我前后17个小时完成,这回自己测试了很多遍,代码 ...
- IOS开发之功能模块--自定义导航控制器类常用自定义的代码
前言:本文篇幅不多,但是涉及到的内容却是开发中常用的. 涉及的内容: 1.统一设置导航控制器子控制器的返回按钮. 2.因为修改了系统的返回按钮,所以还需要设置手势事件. 3.隐藏底部的工具条. 这里直 ...
- iOS开发之功能模块--Apns推送中的的json格式介绍
在开发向苹果Apns推送消息服务功能,我们需要根据Apns接受的数据格式进行推送.下面接受我在进行apns推送时候总结的一点apns服务接受的Json数据格式 示例 1: 以下负载包含哦一个简单的 a ...
- iOS开发之功能模块--根据需求开发横向的子弹盒View
这个需求是本人工作开发中后期需求要添加的新功能,本人模仿UITableView的代理和数据源方法进行了第一阶段的开发.第二阶段是添加丰富的动画. 这个功能需求描述:能上传添加五个待选头像,五个头像分别 ...
- iOS开发之功能模块--推送之坑问题解决
不管想不想看我后面再开发中总结的经验,但是很值得推荐一位大神写的关于苹果推送,很多内容哦:http://www.cnblogs.com/qiqibo/category/408304.html 苹果开发 ...
- iOS开发之功能模块--高仿Boss直聘的IM界面交互功能
本人公司项目属于社交类,高仿Boss直聘早期的版本,现在Boss直聘界面风格,交互风格都不如Boss直聘以前版本的好看. 本人通过iPhone模拟器和本人真机对聊,将完成的交互功能通过Mac截屏模拟器 ...
- iOS开发之功能模块--本地序列化
下面只展示项目开发中,本地序列化的示例代码: AuthenticationManager.h #import <Foundation/Foundation.h> #import " ...
- iOS开发之功能模块--计算高度Demo探究手稿
本篇记录关于计算文本高度和Label高度的代码,以备后期再探究: 首先是YouXianMing老师的工具类别: NSString+LabelWidthAndHeight.h // // NSStrin ...
随机推荐
- Stream Player control
In this article you will find an implementation of a stream player control. Download WPF demo - 11 M ...
- [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [三] 配置式爬虫
[DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 上一篇介绍的基本的使用方式,虽然自由度很高,但是编写的代码相对还是挺多.于是框 ...
- 代码实现SQL Server动态行转列,不用存储过程
分两步查询,第一步查询出动态列,第二步使用PIVOT函数. 代码: List<DataTable> dataTableList = new List<DataTable>(); ...
- 微信开发中遇到“当前页面的url未注册”问题
在公众号后台设置支付授权目录,完全按照规则去设定的,但是在实际测试中会出现“当前页面的url未注册”的问题,反复确认后发现目录并没有问题,唯一的区别就是大小写不同. 但是一般url不都是不区分大小写的 ...
- 【C#】让工具栏ToolStrip能触发焦点控件的Leave、Validating、DataError等事件以验证数据
----------------更新:2014-04-21--------------- 蒙doggo兄指教,得知有更好的方法可以代替蹩脚的0尺寸Button法,即调用窗体的验证方法Form.Vali ...
- Ajax实现定时刷新页面
function deleteValue(){ var refresh = function() { $.ajax({ type:'post', url:'/Application/index ...
- SSH实例(6)
在WebContent文件夹下新建query.jsp和save.jsp文件. query.jsp: <%@ page language="java" import=" ...
- GNOME on Arch Linux
Arch Linux上Gnome桌面截图欣赏: 相比而言,Debian的壁纸一直好像格调不够啊:
- 最新微信公众平台js sdk整合PHP版
由于没有持续关注微信公众平台相关的开发,所以看到这个东西时,都没有耐心看完开发文档,或者不知道重点. 重点在哪呢?重点在示例代码:http://mp.weixin.qq.com/wiki/7/aaa1 ...
- 2015暑假多校联合---CRB and His Birthday(01背包)
题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5410 Problem Description Today is CRB's birthda ...