一、按钮的点击统计

有的时候我们遇见这样的需求,让我们统计用户点击我们页面的动作的次数给与用户以统计,供以后给客户端推送不同的页面数据,这时候我们就会用到iOS的黑魔法(runtime)。

首先我们不可能修改原始的已经开发完的项目,这时候我们可以采用AOP思想的方式去解决这个问题(只是针对按钮的事件统计,而且不是xib创建的,这里我发现xib创建的不行)。

1、首先新建一个按钮的类别,这里我就不用多讲了。

2、头文件引入

#import <objc/runtime.h>

3、+(void)load;  方法实现我们的加载,为什么在这里写代码了,这与运行时的机制有关系,当你向前

+(void)initialize方法创建可以过早就被覆盖,过迟可能加载不上去,所以我们在选择开始加载运算的时候给他替换。

4、直接上代码:如下

+ (void)load {

[super load];

Method fromMethod = class_getInstanceMethod([self class], @selector(sendAction:to:forEvent:));

Method toMethod = class_getInstanceMethod([self class], @selector(HW_sendAction:to:forEvent:));

BOOL didAddMethod = class_addMethod([self class], @selector(HW_sendAction:to:forEvent:), method_getImplementation(toMethod), method_getTypeEncoding(toMethod));

if (didAddMethod) {

class_replaceMethod([self class], @selector(HW_sendAction:to:forEvent:), method_getImplementation(fromMethod), method_getTypeEncoding(fromMethod));

}else{

method_exchangeImplementations(fromMethod, toMethod);

}

}

5、然后实现我们要统计代码的地方,也就是我们用这种岔流给自己预留的埋点。

-(void)HW_sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event

{

//那个页面添加的按钮进行统计

NSLog(@"这里统计点击事件===%@",target);

}

runtime统计页面数据或者统计按钮的点击次数的更多相关文章

  1. [转] c# 模拟Asp.net页面中的某个按钮的点击,向web服务器发出请求

    在没有做题目中所述的内容的时候,感觉这应该是很简单的东西,但是当真正开始做的时候却发现,有很多问题现在在这里写出来,供和我一样水平不高的参考一下. 在写本文之前参照了一下文章 欢迎使用CSDN论坛阅读 ...

  2. Swift 统计项目中所有按钮的点击次数

    class Swizzle: NSObject { override class func load() { UIButton.xxx_swizzleSendAction() } } extensio ...

  3. 利用JS跨域做一个简单的页面訪问统计系统

    事实上在大部分互联网web产品中,我们一般会用百度统计或者谷歌统计分析系统,通过在程序中引入特定的JS脚本,然后便能够在这些统计系统中看到自己站点页面详细的訪问情况.可是有些时候,因为一些特殊情况,我 ...

  4. echart+jquery+json统计TP数据

    由于工作需要,需要统计交易数据的TP50,TP90,TP95,TP99.采用的前端技术是jquery+json+echart. 一.TP定义(谷歌) Calculating TP is very si ...

  5. 如何实现对网站页面访问量的统计(javaweb和php)

    如何实现对网站页面访问量的统计(javaweb和php) 一.总结 一句话总结:其实很简单啦,每访问一次那个页面对应的index函数(控制器中的那个函数)访问次数就加1就可以了. 1.javaweb中 ...

  6. HTTPS页面使用CNZZ统计代码,Chrome显示警告怎么办?

    很多站长会遇到一个问题,网站加入CNZZ的JS统计代码后,Chrome浏览器出现警告:阻止跨站解析器阻断脚本通过document.write调用(A parser-blocking, cross si ...

  7. mysql去重, 把url重复且区为空的中去掉、统计重复数据、、结果集去重合并成一行

    delete from 表名 where id not in (select d.id from (SELECT id FROM 表名 GROUP BY c1,c2,c3,c4)as d) #去重复, ...

  8. kettle数据质量统计

    1.利用Kettle的"分组","JavaScript代码","字段选择"组件,实现数据质量统计.2.熟练掌握"JavaScrip ...

  9. PHP+Mysql+jQuery实现地图区域数据统计-展示数据

    我们要在地图上有限的区块内展示更多的信息,更好的办法是通过地图交互来实现.本文将给大家讲解通过鼠标滑动到地图指定省份区域,在弹出的提示框中显示对应省份的数据信息.适用于数据统计和地图区块展示等场景. ...

随机推荐

  1. plsql连接oracle

    在plsql中:   需要在工具----选项    指定 1. orcacle   主目录    :G:\PLSQL Developer 11.0.0.1762 中文绿色注册版(免Oracle11g客 ...

  2. 爬虫基础之requests模块

    1. 爬虫简介 1.1 概述 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 1.2 爬虫的价值 在互 ...

  3. php动态获取网页图片路径~

    <?phpheader("Content-type:text/html;charset=utf-8"); 请求的url $url = 'http://dsc.taobaocd ...

  4. MySQL自定义函数递归查询

    用于递归查找Id(通过parentId关联)参数为int 类型的值: CREATE DEFINER=`root`@`%` FUNCTION `getChildList`(rootId INT) RET ...

  5. vue实现实时监听文本框内容的变化(最后一种为原生js)

    一.用watch方法监听这个变量. <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  6. Docker五大优势:持续集成、版本控制、可移植性、隔离性和安全性

    随着Docker技术的不断成熟,越来越多的企业开始考虑使用Docker.Docker有很多的优势,本文主要讲述了Docker的五个最重要优势,即持续集成.版本控制.可移植性.隔离性和安全性. 对于Do ...

  7. golang相关书签

    https://www.zhihu.com/question/30461290 golang资料精选汇编

  8. .NetCore WebApi 添加 Log4Net

    一 .配置 1.vs2019 创建一个.net core web程序,选择webapi 2.项目中添加一个配置文件:添加--新建项--XML文件,命名为log4net.config 我使用的是log4 ...

  9. activiti-explore(activiti5.17) 替换数据库

    http://blog.csdn.net/xiangwangye66/article/details/46943301

  10. Linux 配置ssh 免密码登录

    在平常应用中,我们经常会登录到其他主机,比如说服务器,每次都需要用户名和密码. 我们可以通过ssh免密码登录服务器而不需要输入密码. 现在有一台ubuntu的阿里云服务器,称之为 server.  公 ...