转载

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

这是购物车页面:

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

有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;
}

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

一目了然。

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

作者:无夜之星辰

正文到此结束
Loading...