如何处理一个tableView中同种model多种cell相同逻辑的情况?
来源:互联网 发布:python编辑器推荐sum 编辑:程序博客网 时间:2024/06/05 20:23
点击上方“iOS开发”,选择“置顶公众号”
关键时刻,第一时间送达!
IU的图片用完了,用我允的代替一下
这是购物车页面:
有4种cell:
1.一般商品cell
2.带赠品的商品cell
3.满赠商品cell
4.补货中商品cell
一般来说,有多少种cell就要自定义多少种cell,但是这4种cell又有相同的逻辑处理,如点击商品图片进入商品详情页。如何处理既不会让代码显得啰嗦又不会因为继承导致耦合度变高?
我的做法是先封装一个基类cell,这个cell只封装逻辑处理相关代码:
#import <UIKit/UIKit.h>
#import "CQShopCartCellModel.h"
@class CQShopCartGoodsCell;
@protocol CQShopCartGoodsCellDelegate <NSObject>
@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) id <CQShopCartGoodsCellDelegate> delegate;
@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;
}
一目了然。
欢迎大家说出自己的想法。
作者:无夜之星辰
链接:http://www.jianshu.com/p/f308c43fb459
iOS开发整理发布,转载请联系作者授权
【点击成为Java大神】
- 如何处理一个tableView中同种model多种cell相同逻辑的情况?
- 如何处理Tableview中cell的单选问题
- 在一个tableView 中需要自定义多种样式的cell(两种或三种),通常你如何实现,说说思路即可?
- tableview列表中的cell单元格有倒计时的情况处理
- 仿QQ空间用一个tableview显示多种自定义cell
- storyboard如何去掉tableview中多余的cell
- tableview中cell的设置
- tableview中cell的设置
- iOS之如何处理TableView cell内容不一致以及cell复用重叠的问题
- 一个tableView的Cell中有两个点击按钮及tableView的重用
- 关于TableView中不止一个section的情况下首个cell的y轴不为0的会造成的问题和解决办法
- 自定义TableView 继承, cell, model
- 处理身份证相同的情况
- 13 自定义cell、cell自适应高度、 多种类型的cell混合使用、 UITableViewController、model类
- tableview中定义某个cell的高度
- IOS开发 tableview中cell的用法
- IOS开发 tableview中cell的用法
- tableView的中cell添加图像
- JSP页面生命周期
- JSP生成九九乘法表
- UGUI的按钮监听事件系统
- JSP内置对象简介
- Linux anacron配置及总结
- 如何处理一个tableView中同种model多种cell相同逻辑的情况?
- Shell脚本典型应用
- JSP的out对象
- 表单提交get和post
- VIM编辑器基本设置
- Shell高亮显示
- Shell脚本之场景脚本结构梳理
- CentOs安装redis
- SQL Server2000 附加数据库时出现数据库累计大小超过使用许可限制的解决方法