iOS UICollectionViewCell 点击事件自动化埋点

devtools/2025/3/7 2:08:02/

iOS 中经常要进行埋点,我们这里支持 UICollectionViewCell. 进行自动化埋点,思路:
通过hook UICollectionViewCell 的setSelected:方法,
则新的方法中执行埋点逻辑,并调用原来的方法

直接上代码

@implementation UICollectionViewCell (LB)+ (void)load
{instanceMethodExchangeImplementations([self class], @selector(setSelected:), [self class], @selector(setSelectedWithFilter:));
}-(void)setSelectedWithFilter:(BOOL)selected
{// 过滤拼音键盘提示词if (selected && !self.skipTrack ) {UIView *tempSuperView = self.superview;while (tempSuperView) {if ([tempSuperView isKindOfClass:[UICollectionView class]]) {break;}tempSuperView = tempSuperView.superview;}// 非LBScrllView的cell,才由setSelected触发点击采集,LB cell由didSelected触发,if (tempSuperView && [tempSuperView isKindOfClass:[UICollectionView class]]&& ![tempSuperView isKindOfClass:[LBCollectionView class]] && ![tempSuperView isKindOfClass:[LBScrollView class]]) {UICollectionView *collectionView = (UICollectionView *)tempSuperView;if (![collectionView isDragging] && ![collectionView isTracking] && ![collectionView isDecelerating]) {[self setMonitorSelected:selected];}}}[self setSelectedWithFilter:selected];
}- (void)setMonitorSelected:(BOOL)selected
{if (selected && !self.skipTrack) {//执行埋点逻辑}
}- (void)logClickCell
{}@end

http://www.ppmy.cn/devtools/165129.html

相关文章

Linux安装Redis以及Redis三种启动方式

目录树 一、安装前的软件准备二、Redis的安装三、Redis的三种启动方式!!! 1、直接启动Redis2.后台进程方式启动Redis3.通过开机启动方式 四、Window上桌面连接Linux上的Redis 一、安装前的软件准备 Xshell —— 连接Linux并操作其终端的软…

HCIA-IP路由动态-RIP

一、概念 动态路由是指路由器通过运行动态路由协议(RIP、OSPF等),自动学习和发现网络中的路由信息。路由器之间通过交换路由协议数据包,互相通告自己所知道的网络信息,从而构建和更新路由表。 二、RIP(路由信息协议)…

CSS—px与rem:3分钟掌握rem适配原理

个人博客:haichenyi.com。感谢关注 1. 目录 1–目录2–px3–rem4–移动端适配 2. px(像素) px我们用的很多,一直都在用。我们真的了解px吗?   之前最常见的720P的分辨率和1080P的分辨率是啥意思?这里的720P的对应的就是1280x72…

SOUI基于Zint生成EAN码

EAN码广泛应用与欧洲的零售业。包括EAN-2、EAN-5、EAN-8和EAN-12码。分别编码 2、5、7 或 12 位数字。此外,可以使用 字符将 EAN-2 和 EAN-5 附加符号添加到 EAN-8 和 EAN-13 符号中,就像 UPC 符号一样。 EAN-8校验码计算: 从左往右奇数位的…

Android动态适配中英文开发指南

Android动态适配中英文开发。首先,我需要确定用户的需求到底是什么。可能他们正在开发一个需要支持中英文的Android应用,想要知道如何动态切换语言,而不仅仅是依赖系统默认语言。或者他们可能遇到了在应用内切换语言时的一些问题,…

将JSON格式数据转化为sql 插入语句

import json# 从 txt 文件中读取 JSON 数据 def read_json_from_file(file_path):with open(file_path, r, encodingutf-8) as file:return file.read()# 将 SQL 语句写入到 txt 文件中 def write_sql_to_file(output_file_path, sql_statements):with open(output_file_path, …

AI面板识别 - 华为OD统一考试(java)

题目描述 AI识别到面板上有N(1 ≤ N ≤ 100)个指示灯,灯大小一样,任意两个之间无重叠。 由于AI识别误差,每次别到的指示灯位置可能有差异,以4个坐标值描述AI识别的指示灯的大小和位置(左上角x1,y1&#x…

React Native 原理

React Native 是一个跨平台移动应用开发框架,它允许开发者使用 JavaScript 和 React 来开发 iOS 和 Android 原生应用。React Native 的核心原理是通过 桥接(Bridge) 技术,使用 JavaScript 来控制原生组件,并将应用逻辑…