GitHub: https://github.com/lll1024/JVShopcart
这是一个具备常规功能并方便改造的购物车模型 一共包含五个模块:
JVShopcartViewController
: 购物车控制器 负责协调 Model 和 View 只有 100 多行代码JVShopcartFormat
: 负责网络请求与逻辑处理JVShopcartTableViewProxy
: 作为控制器里边 TableView 的代理View
: 包括 Cell 、 HeaderView 、 CountView(改变商品数的视图)、 BottomView(控制器底部包含结算按钮的视图)Model
: 包含 BrandModel 和 ProductModel 两层首先将工程里边的 JVShopcart 文件夹拖入你的项目 然后就是开源库 Vendor 文件夹根据需求处理 Model 是一定会改的 但是购物车的 Model 大同小异 其他的改动不会太大
关于JVShopcartViewController
,由于其遵循 JVShopcartFormatDelegate 协议,而协议里边的方法都是用@required
修饰的,所以必须要实现它;下面依次介绍这些方法:
- (void)shopcartFormatRequestProductListDidSuccessWithArray:(NSMutableArray *)dataArray;
- (void)shopcartFormatAccountForTotalPrice:(float)totalPrice
totalCount:(NSInteger)totalCount
isAllSelected:(BOOL)isAllSelected;
- (void)shopcartFormatSettleForSelectedProducts:(NSArray *)selectedProducts;
- (void)shopcartFormatHasDeleteAllProducts;
JVShopcartTableViewProxy
并刷新 TableView 。JVShopcartViewController
, 控制器拿着这些数据调用底部结算视图 BottomView 的 configure 方法并刷新 TableView ,就完成了 UI 更新。JVShopcartViewController
,但并不改变原数据源因为用户随时可能返回。关于JVShopcartFormat
,这个类主要负责网络请求与逻辑处理以及结果的回调。下面依次介绍这些方法:
- (void)requestShopcartProductList;
- (void)selectProductAtIndexPath:(NSIndexPath *)indexPath isSelected:(BOOL)isSelected;
- (void)selectBrandAtSection:(NSInteger)section isSelected:(BOOL)isSelected;
- (void)changeCountAtIndexPath:(NSIndexPath *)indexPath count:(NSInteger)count;
- (void)deleteProductAtIndexPath:(NSIndexPath *)indexPath;
- (void)starProductAtIndexPath:(NSIndexPath *)indexPath;
- (void)selectAllProductWithStatus:(BOOL)isSelected;
- (void)settleSelectedProducts;
以上如有帮助欢迎 star
1
gen900 2017-03-28 17:47:38 +08:00
这个组件好,要早几年发布我也不用这么辛苦做购物车了,确实很花功夫。
|
2
gen900 2017-03-28 17:50:20 +08:00
如果能支持 最小/最大 购买数量就更好了。或者增加个属相修改的 delegate ,(bool) qualityChanging, didQualityChanged
|
3
Jarvi OP @gen900 最大购买量是依赖库存的( ProductModel 里边 productStock 参数) 当“+”变灰色就表示不可点状态也就无法添加了 最小购买量当然是 1 了 商品数量的改变是 JVShopcartFormat 的- (void)changeCountAtIndexPath:(NSIndexPath *)indexPath count:(NSInteger)count 负责处理 处理完之后会统一回调这个方法
- (void)shopcartFormatAccountForTotalPrice:(float)totalPrice totalCount:(NSInteger)totalCount isAllSelected:(BOOL)isAllSelected; |