基础库梳理一

背景

当iOS的项目比较成熟后,下一步伴随着的设计必然是进行相关组件化的尝试,也就是最后的项目设计必然是模块化,而模块化的前提必然是进行公共组件或者业务的提取,构建成对应的成熟可扩展的framwork进行引入就可以使用其中的api业务。


整体结构图

下面是关于我们本身应用设计的整体组件结构图


着手开始

我们前面进行常用公共方法api集成构建的PublicMethods模块即可看做是其中初步实现的基础工具类集群framework,那下面我要处理的是项目中UI和数据等构建的基础视图库framework和基础数据库framework。


梳理第一章节

基础视图库framework

目前比较成熟的基础UI库就是对应的QMUIKit框架,那么我们目前是以该框架为原型进行继承构建,主要是为了统一基础样式以及后续的可替换可维护性。这里对应的QMUI的视图不做介绍,这里只是对其缺失的需要进行相关的补充.


UIView–系统类基础视图

1.做分类category(组件化思考),包括:

  • 空白视图(也可直接应用QMUIKit的QMUIEmptyView)
  • 红点badge(可引入或者仿写第三方框架)
  • 事件绑定
  • 视图背景图加载

UIButton–系统类基础按钮

分类实现,包括:

  • 按钮远程图片加载
  • 响应区设置

UIScrollView–系统类基础滚动视图

分类实现,包括:

  • 重复嵌套的手势识别字段控制

UILabel–系统类基础标签文本视图

这里继承QMUILabel即可,提供:

  • 提供加载html或者富文本的api

UITextView–系统类基础多行文本视图

这里继承QMUITextView即可,提供:

  • 验证输入代理
  • 宽度计算

UITableViewCell–系统类基础表单cell视图

这里走继承体系QMUITableViewCell,主要是为了承接多态设计

1
2
3
4
5
6
7
8
9
@interface BaseTableViewCell : QMUITableViewCell

@property (nonatomic, strong) id model;

- (void)defaultSetting;

- (void)setUI;

@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@implementation BaseTableViewCell
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
[self defaultSetting];
[self setUI];
}
return self;
}

- (void)defaultSetting {
self.layer.shouldRasterize = YES;
self.layer.rasterizationScale = [UIScreen mainScreen].scale;
self.layer.contentsScale = [UIScreen mainScreen].scale;
self.selectionStyle = UITableViewCellSelectionStyleNone;
}

- (void)setUI {
[self createInsertsView:UIEdgeInsetsMake(0, 0, 0, 0)];
}
@end

UICollectionViewCell–系统类基础九宫格cell视图

走继承UICollectionViewCell,主要是为了承接多态设计

1
2
3
4
5
6
7
8
9
10
11
@interface BaseCollectionViewCell : UICollectionViewCell

@property (nonatomic, strong) id model;
//指明indexPath
@property (nonatomic, strong) NSIndexPath *indexPath;

- (void)defaultSetting;

- (void)setUI;

@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@implementation BaseCollectionViewCell

- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self defaultSetting];
[self setUI];
}
return self;
}

- (void)defaultSetting {
self.layer.masksToBounds = NO;
self.layer.contentsScale = [UIScreen mainScreen].scale;
}

- (void)setUI {
[self createInsertsView:UIEdgeInsetsMake(0, 0, 0, 0)];
}

UIViewcontroller–基础控制器

基础控制器一般是构建一个基础BaseViewcontroller继承UIViewcontroller作为顶层可扩展类。

划分结构:

1.状态栏statusBar样式

  • 使用UIViewcontroller的分类进行api的控制,因为子类可以重写改变

2.自动旋转,目前应用不支持自动旋转,这里省略

3.视图操作

  • 构建viewDidLoad的默认setting方法,让子类重写
  • 根据route进行参数映射公共方法解析

基础的就是上面一些,下面就是关于BaseViewcontroller继承扩展的控制器:

1.BaseListViewController

顾名思义,就是列表视图的常用结构,提供子类重写便于扩展(如果想使用QMUITableView的组件机制也是可行的)

  • 提供上下刷新的组件分类
  • 提供空白页显示的组件分类
  • 提供刷新提示语控制的组件分类
  • 其他业务操作组件分类
2.BaseWebViewController

进行h5页面装载的容器控制器

  • 常规UI设置及url加载逻辑
  • 桥接组件化分类
  • 代理组件化分类
  • 其他业务操作组件化分类