UICollectionView AOP 注入方案 -- 不入侵任何的业务代码

之前开源了基于 UITableView 的注入方案 https://www.jianshu.com/p/b3605bc0aa29

由于公司用的 UICollectionView 并不多就没有继续支持 UICollectionView 方案实现。

2年过去了...

后续公司上线了小视频模块,基于瀑布流布局(CHTCollectionViewWaterfallLayout),由于没有对应的AOP框架,广告同学要插入广告就只能跟业务代码耦合在一起了。。。

但是 用爽了 IMYAOPTableView 的广告同学,对这种耦合式的开发非常不适应,所以决定把 UICollectionView 的支持也做完下。 完成 Feeds 流页面 AOP 全家桶。

与 UITableView 的不同

核心原理类似,只是 UICollectionView 的 delegate 并不是固定的,而是基于各种 layout 有不同的回调...

目前方案内 支持 2种布局的 AOP,应该可以满足大部分页面的需求了

  • UICollectionViewDelegateFlowLayout,
  • CHTCollectionViewDelegateWaterfallLayout

但是 podspec 中并没有 依赖 CHTCollectionViewDelegateWaterfallLayout,工程中是如何检测的?

其实是利用了 __has_include


#if __has_include()
#import 
#define _has_chtwaterfall_layout_ 1
#else
#define _has_chtwaterfall_layout_ 0
#endif

#if _has_chtwaterfall_layout_
@protocol IMYAOPCollectionViewDelegate 
#else
@protocol IMYAOPCollectionViewDelegate 
#endif

结尾

其他的好像也没啥好说的了。。

用法跟 UITableView 的注入一致,具体可以看项目中的 demo

github: https://github.com/MeetYouDevs/IMYAOPTableView

你可能感兴趣的:(UICollectionView AOP 注入方案 -- 不入侵任何的业务代码)