登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

iOS “类族”的实际运用 [复制链接]

2018-8-17 14:19
ceshishangchuan 阅读:500 评论:0 赞:1
Tag:  

1. 场景还原

如图,三种cell的tableView:

三种cell.gif

后台返回的json数据如下:

{
    "result": true,
    "data": {
        "list": [ {
                 "type": 0,
                 "title": "第一种cell,图片在左边",
                 "image": "number_1"
                 }, {
                 "type": 1,
                 "title": "第二种cell,图片在右边",
                 "image": "number_2"
                 }, {
                 "type": 2,
                 "title": "第三种cell,图片在中间",
                 "image": "number_3"
                 }, {
                 "type": 0,
                 "title": "老子反手就是一个呵呵哒",
                 "image": "number_1"
                 }]
    },
    "msg": "ok",
    "code": 200,
    "executed": "0.0320830345"
}

 

类似于这种同种model,多种cell的tableView相信不少开发者在实际项目开发中都遇到过,我分享一下我的做法,谨以抛砖引玉。

2. 文件组织

1692043-d5b2c3e75df467aa (1).png

2.1 什么是抽象基类?

只用于继承、不用于实例化的类。

3. 类族

类族,就是将子类的实现细节隐藏在抽象基类中。(个人理解)

这是抽象基类cell代码:

1
2
3
4
5
6
7
8
9
10
11
12
+ (instancetype)cellWithType:(CQClassClusterType)type {    // 根据type创建对应的子类cell
    switch (type) {        case CQClassClusterTypeA:
        {            return [[CQClassClusterCellA alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CQClassClusterCellAReuseID];
        }            break;            
        case CQClassClusterTypeB:
        {            return [[CQClassClusterCellB alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CQClassClusterCellBReuseID];
        }            break;            
        case CQClassClusterTypeC:
        {            return [[CQClassClusterCellC alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CQClassClusterCellCReuseID];
        }            break;
    }
}

使用:

1
2
3
4
5
6
7
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    CQClassClusterModel *model = self.dataArray[indexPath.row];
    CQClassClusterBaseCell *cell = [tableView dequeueReusableCellWithIdentifier:model.cellReuseID];    if (!cell) {        // 类族模式
        cell = [CQClassClusterBaseCell cellWithType:model.type];
    }
    [cell setModel:model];    return cell;
}

4. demo

https://github.com/CaiWanFeng/iOS_Storage

demo所在位置:

1692043-1c57d675534de4ae.png


分享到:
我来说两句
facelist
您需要登录后才可以评论 登录 | 立即注册
所有评论(0)
关闭

每日头条

通过邮件订阅最新 Code4App 信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

返回顶部