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)

用户喜欢...

一个经过验证的工业物联网成功计划

今天的数据很像太阳能。它的数量非常庞大-每天创造超过250万太字节- 每个人都希望找到一种方法来利用其动力来进行操作。但这是一个复杂的过程,你现在的状况仍然可行,让其他人想出来...


STMicroelectronics 智能、灵活的 NFC 跟踪器评估板包括一个全面的软件库

STMicroelectronics 智能、灵活的 NFC 跟踪器评估板包括一个全面的软件库 STMicroelectronics智能、灵活的 NFC 跟踪器评估板带传感器,包括全面的软件库和示例应用程序,可监视和记录通过 NFC 传输的来...


一个小小的物联网知识可以走很长的路

物联网(IoT)正在改变一切,它不仅仅是人与机器之间的互动。 与任何新兴或新兴技术一样,它所创造的变化常常以多种方式在社会中涟漪。它可能会改变企业的运营方式,甚至改变他们提供...


无人机设计中的下一个进化步骤

有人认为,无人机(UAV)或无人驾驶飞机的商业重要性可能与互联网一样重要。诸如空中摄影和录像等高性能应用在很大程度上被无人机民主化,具有很大的吸引力和相应的高音量。更深奥的用...


了解物联网中的“事物”

我有一个难以置信的乐趣,就是逃避东北部的冬季低潮,然后前往佛罗里达阳光灿烂的椰林(Coconut Grove)参加国际维护大会(IMC)。这个年会是资产管理者,工厂经理和可靠性工程师必须看到...


如何建立一个可扩展的DIY iBeacon

在阅读Eddystone发布后,我对物理网络的概念感到非常兴奋。从200多个通知走出商场的想法在一定程度上蕴藏着我的热情,但是使用iBeacons做广告和销售以外的事情是一个非常有趣的机会。 我有一...


用Raspberry Pi 3构建一个低成本的工业控制器

很少有小型工厂操作要求严格的操作环境,高I / O容量和可编程逻辑控制器(PLC)最初预期的复杂功能要求的组合。在缩小版本的PLC的同时,设计人员现在也可以选择一系列低成本的开源硬件和...


降低机器人风险:如何设计一个安全的工业环境

工业自动化(IA)的增加,尤其是工业机器人的使用,正在增加人类操作员与其他移动设备或移动机器之间的意外交互的机会。设计人员有责任采取适当且经常重叠的安全措施,以避免从生产中...


Hayabusa平台是一个像素范围介于1Mp到5Mp的图像传感器

在安全和便利性能特点的双重驱动下,对驾驶员辅助系统的需求增长,令车中具备成像功能的系统数量也在迅速攀升。这类先进驾驶员辅助系统可实现自适应巡航控制和自动紧急制动等功能。除...


瑞萨Synergy™平台

瑞萨Synergy平台是一个完整且合格的平台,可加速嵌入式开发,激发创新并实现差异化。Synergy平台将复杂的系统设计快速推向市场。这个完整且合格的平台包括软件,可扩展的微控制器系列和开...