close
当前位置: 物联网在线 > 技术文库 > ios >

一个逻辑清晰的购物车模型

一个逻辑清晰的购物车模型

2017-03-25 18.28.23.gif

说明

这是一个具备常规功能并方便改造的购物车模型 一共包含五个模块:

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;

这是请求购物车列表成功之后的回调方法,将装有Model的数组回调到控制器;控制器将其赋给TableView的代理类 JVShopcartTableViewProxy 并刷新TableView。

这是用户在操作了单选、多选、全选、删除这些会改变底部结算视图里边的全选按钮状态、商品总价和商品数的统一回调方法,这条API会将用户操作之后的结果,也就是是否全选、商品总价和和商品总数回调给 JVShopcartViewController , 控制器拿着这些数据调用底部结算视图BottomView的configure方法并刷新TableView,就完成了UI更新。

这是用户点击结算按钮的回调方法,这条API会将剔除了未选中ProductModel的模型数组回调给 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;

这是请求购物车数据源的方法,大家一般都是对AFNetworking进行二次封装来请求数据。

这是用户选中了某个产品或某个row的处理方法,因为这会改变底部结算视图所以一定会回调上文协议中的第二个方法, 下同。

这是用户选中了某个品牌或某个section的处理方法

这是用户改变了商品数量的处理方法

这是用户删除操作的处理方法

这是用户收藏操作的处理方法,这里没有回调任何方法,也可以根据需求添加回调方法。

这是用户结算操作的处理方法

有几个点需要注意:

BrandModel里边有两个成员变量是手动添加进去的:isSelected和selectedArray前者是为了记录某个品牌或者说某个section是否被选中 后者是结算的时候记录选中的商品

ProductModel里边的isSelected也是手动添加的 也是为了记录某个商品或者说某个row是否被选中

Vendor文件夹里边是一些开源库 布局依赖Masonry 字典转模型依赖MJExtension 图片异步加载依赖SDWebImage 键盘的管理依赖IQKeyboardManager 当然你也可以自己处理

View里边的回调都是用的Block JVShopcartFormat里边的回调都是用的delegate 你也可以根据需求自行选择具体的回调方式

虽然购物车大同小异 但是总有些奇葩的需求需要自己去处理 肯定是要根据我的注释去做一些修改的


(责任编辑:ioter)

用户喜欢...

如何使用可编程逻辑为按钮输入消抖

可编程逻辑具有传统分立 IC 无法提供的灵活性。 借助现成的开发工具,可轻松使用现场可编程门阵列和复杂可编程逻辑器件创建应用特定型功能。 按钮开关输入消抖便是此类功能的一个例子...


走近深度学习——来解决一个年龄检测的问题

介绍 通过阅读或观看视频/MOOC来学习数据是一回事,将之应用到具体问题之中又是另一回事了。你需要同时做好才能...


除了端到端,英特尔在自动驾驶领域还有一个杀手锏

针对自动驾驶,英特尔自动驾驶解决方案资深首席工程师兼首席系统架构师Jack Weast这样发问,“我们的自动驾驶汽车...


用Python画一个中国地图

为什么是Python 先来聊聊为什么做数据分析一定要用Python或R语言。编程语言这么多种,Java, PHP都很成熟,但是为什么...


Thunderboard Sense评测——贵族之选,一个真正懂你的超低功耗物联网传感器开发套件

在2017贸泽电子智造创新大赛即将开赛之际,爱板网收到了不少赞助商为此次大赛的参赛者提供的开发板,到底多少种...


训练一个神经网络 能让她认得我

作者:哪里来的木木 这段时间正在学习tensorflow的卷积神经网络部分,为了对卷积神经网络能够有一个更深的了解,自...


实战 | 让机器人替你聊天,还不被人看出破绽?来,手把手教你训练一个克隆版的你

作者:史天 聊天机器人到底是什么呢?说白了,就是计算机程序通过听觉或文本方法进行对话。 当今最流行的四个对...


一个优雅地探索相关性的新可视化方法

一个古老的诅咒一直萦绕着数据分析:我们用来改进模型的变量越多,那么我们需要的数据就会出现指数级的增长。...


迈瑞彩超成像系统:以前所未有的清晰度呈现更多临床价值

作为世界顶级的医疗超声供应商之一,迈瑞基于ZST+域光平台及域成像技术(Zone Songraphy)的 Resona 7高端彩色多普勒超声系统,提供了前所未有的成像质量,可以帮助医生清晰地呈现更多临床信...


美市调公司预测 下一个营销战场:无人车广告

这种利用科技、无需人类司机的“无人车”,除了带来交通变革,又将引发怎样的营销战场?...