首页 >iOS开发

如何处理一个tableView中同种model多种cell相同逻辑的情况?

2017-11-13 16:41 编辑: yyuuzhu 分类:iOS开发 来源:无夜之星辰

这是购物车页面:

1.png

有4种cell:

1.一般商品cell

2.带赠品的商品cell

3.满赠商品cell

4.补货中商品cell

一般来说,有多少种cell就要自定义多少种cell,但是这4种cell又有相同的逻辑处理,如点击商品图片进入商品详情页。如何处理既不会让代码显得啰嗦又不会因为继承导致耦合度变高?

我的做法是先封装一个基类cell,这个cell只封装逻辑处理相关代码

#import
#import "CQShopCartCellModel.h"
@class CQShopCartGoodsCell;
@protocol CQShopCartGoodsCellDelegate
@optional
/** 选中按钮点击 */
- (void)goodsCell:(CQShopCartGoodsCell *)goodsCell chooseButtonDidClick:(UIButton *)chooseButton;
/** 加按钮点击 */
- (void)goodsCell:(CQShopCartGoodsCell *)goodsCell addButtonDidClick:(UIButton *)addButton;
/** 减按钮点击 */
- (void)goodsCell:(CQShopCartGoodsCell *)goodsCell minusButtonDidClick:(UIButton *)minusButton;
/** 商品图片点击 */
- (void)goodsCell:(CQShopCartGoodsCell *)goodsCell goodsImageViewDidTap:(UIImageView *)goodsImageView;
@end
@interface CQShopCartGoodsCell : UITableViewCell
@property (nonatomic, weak) iddelegate;
@property (nonatomic, strong) CQShopCartCellModel *model;
@end

然后4种cell再继承这个基类cell。

在controller中:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    CQShopCartGoodsCell *goodsCell = [tableView dequeueReusableCellWithIdentifier:@""];
    CQShopCartCellModel *model = nil;
    switch (indexPath.section) {
        case 0: // 普通商品
        {
            model = self.commonGoodsArray[indexPath.row];
            if (goodsCell == nil) {
                if (model.giftsArray.count > 0) {
                    // 有赠品的商品
                    goodsCell = [[CQShopCartHaveGiftGoodsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CQShopcartHaveGiftGoodsCellID];
                } else {
                    // 无赠品的商品
                    goodsCell = [[CQShopCartNoGiftGoodsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CQShopcartNoGiftGoodsCellID];
                }
            }
        }
            break;
            
        case 1: // 满赠商品
        {
            model = self.giftGoodsArray[indexPath.row];
            goodsCell = (goodsCell ?: [[CQShopCartGiftGoodsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CQShopcartGiftGoodsCellID]);
        }
            break;
            
        case 2: // 补货中商品
        {
            model = self.emptyGoodsArray[indexPath.row];
            goodsCell = (goodsCell ?: [[CQShopCartEmptyGoodsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CQShopcartEmptyGoodsCellID]);
        }
            break;
            
        default:
            break;
    }
    goodsCell.model = model;
    goodsCell.delegate = self;
    return goodsCell;
}

1.png

一目了然。

欢迎大家说出自己的想法。

作者:无夜之星辰

搜索CocoaChina微信公众号:CocoaChina
微信扫一扫
订阅每日移动开发及APP推广热点资讯
公众号:
CocoaChina
我要投稿   收藏文章
上一篇:iOS新版本导航栏透明度设置发现的问题
我来说两句
发表评论
您还没有登录!请登录注册
所有评论(0

综合评论

相关帖子

sina weixin mail 回到顶部