iOS 同界面多表单代码抽离 MVP?

在iOS开发过程中,经常遇到同一个界面有多个表单的情况,表单通常为UITableView/UICollectionView,其数据展示方式是通过实现代理方法,返回布局、样式最终展示到界面上。
在多表单的情况下,如果将实现代理方法都设置为同一个对象,会导致这个对象的实现文件代码量变得庞大,可读性低。先看下如下例子。


需求

相信很多读者看到这里,会想到将上图的三个表单通过实现三个不同的View将其分开,然后在ViewController里将3个包含表单的View贴上去。
我的处理方法大致上也类似,但我并不去创建一个新的View来容纳CollectionView。
思路如下:

我的解决方案

我通过创建三个不同的“Helper”来负责实现以上三个不同的表单,即将以上3个表单的数据代理方法给Helper来实现。

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UICollectionView *headerCollectionView;
@property (weak, nonatomic) IBOutlet UICollectionView *contentCollectionView;
@property (weak, nonatomic) IBOutlet UICollectionView *footerCollectionView;

@property (nonatomic, strong) HeaderHelper *headerHelper;
@property (nonatomic, strong) ContentHelper *contentHelper;
@property (nonatomic, strong) FooterHelper *footerHelper;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // HeaderHelper负责实现顶部表单
    self.headerHelper = [HeaderHelper new];
    self.headerCollectionView.dataSource = self.headerHelper;
    self.headerCollectionView.delegate = self.headerHelper;
    
    // ContentHelper负责中间的内容表单
    self.contentHelper = [ContentHelper new];
    self.contentCollectionView.dataSource = self.contentHelper;
    self.contentCollectionView.delegate = self.contentHelper;
    
    // FooterHelper负责底部功能选项的表单
    self.footerHelper = [FooterHelper new];
    self.footerCollectionView.dataSource = self.footerHelper;
    self.footerCollectionView.delegate = self.footerHelper;
} 

@end

可以看demo:https://github.com/Linzehua2015/HelperDemo

其他应用场景

咱们继续往下,这套解决方案同样可以用在应用内的搜索模块。
如下:


搜索模块

在一个ViewController下实现3个不同的Helper,在用户进行搜索操作的时候,根据返回的数据是否为空,切换表单的代理方法实现对象,以此达到不数据内容变化。

最近学习了MVP,才发现我这个架构跟MVP是一样的意思。文中的Helper等同于MVP的Presenter。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,028评论 3 119
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,762评论 8 265
  • 南方小城的山连绵不断 山顶往下看的角度理想且简单 路上所想太多不能实现 索性就近回头随便且自我疯癫 回头看了看十七...
    一passerby阅读 245评论 0 3
  • 敬笃 寒来暑往,在北半球的温带,貌似合乎逻辑,冬有雪,夏有雨,太阳即使光芒万丈,也难以左右这既定的程序。 坠落于地...
    山谷小道士阅读 401评论 0 2
  • 今天是九九重阳节,其实并没有太多的感慨,只是特别想念我的奶奶、我的爷爷和我的外婆,他们都已经与世长眠,想着...
    小余的江湖阅读 226评论 0 0