当前位置: 首页 > 编程日记 > 正文

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

效果图


2017-03-25 18.28.23.gif


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)totalPricetotalCount:(NSInteger)totalCountisAllSelected:(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 你也可以根据需求自行选择具体的回调方式
  • 虽然购物车大同小异 但是总有些奇葩的需求需要自己去处理 肯定是要根据我的注释去做一些修改的

以上如有帮助欢迎star GitHub: https://github.com/lll1024/JVShopcart

 iOS

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

赞赏支持

相关文章:

Nginx基本配置、性能优化指南

转载自:http://www.chinaz.com/web/2015/0424/401323.shtml 大多数的Nginx安装指南告诉你如下基础知识——通过apt-get,或yum安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了!而且&#xff…

关于批量修改AD域用户的脚本

最近几天帮人弄了个脚本,是修改域用户属性的脚本,今天看到徐火军写的 关于批量修改用户属性 脚本,觉得有必要把我的成果分享给大家。什么都不说了,上脚本: Dim oFSO, oTF, iDim sLineDim sLoginName 用户批量文件Const…

Python multiprocess 多进程模块

转发:http://www.langzi.fun/Python multiprocess 多进程模块.html 需要注意的是,如果使用多线程,用法一定要加上if __name____main__:(Python中的multiprocess提供了Process类,实现进程相关的功能。但是它基于fork机制&#xff…

PHP正则数组

<?php //正则表达式//斜杠代表定界符 /^$///$str "好厉害18653378660了hi请勿嫁得好15165339515安徽dah矮冬瓜 拍行业大概啊好广东也欺负偶怕哈";//$reg "/(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}/";//echo preg_repl…

iOS Socket Client 通讯

iOS Socket Client 通讯 阅读 239收藏 192017-03-29原文链接&#xff1a;https://github.com/guangzhouxia/JTSocketiOS Socket Client 通讯&#xff08;偏流程和代码展示&#xff09;&#xff0c;具体原理可以在网上搜索到很多&#xff0c;就不多做追叙复制了。。。 —— 由广…

api工程IOS学习:在IOS开发中使用GoogleMaps SDK

今天一直在学习api工程之类的问题,今天正好有机会和大家分享一下. 官方文档地址&#xff1a;https://developers.google.com/maps/documentation/ios/start#getting_the_google_maps_sdk_for_ios 一、申请一个收费的API KEY 要应用GoogleMaps SDK&#xff0c;必须要为你的应用申…

Python多进程与进程锁的基本使用

Python的multiprocessing模块提供了多种进程间通信的方式&#xff0c;如Queue、Pipe等。 Queue是multiprocessing提供的一个模块&#xff0c;它的数据结构就是"FIFO——first in first out"的队列&#xff0c;常用的方法有&#xff1a;put(object)入队&#xff1b;g…

[容易]比较字符串

题目来源&#xff1a;http://www.lintcode.com/zh-cn/problem/compare-strings/ 先贴上错误代码&#xff0c;测试案例没有全部通过。不一定是顺序的。 1 class Solution {2 public:3 /**4 * param A: A string includes Upper Case letters5 * param B: A string…

iOS 一行命令发布 Pod 框架

作者 ripperhe 关注 2017.03.30 23:38* 字数 5589 阅读 27评论 0喜欢 2前言 目前比较流行的组件化开发&#xff0c;针对多个 app 要用同一套代码&#xff0c;将其做成 pod 仓库是比较好的解决方案。代码只有一份放在组件仓库&#xff0c;需要集成的 app 只需要将其 pod 到工程内…

[bbk4966]第70集 第8章 -性能维护 01

本章前言: 每秒钟&#xff0c;产生的日志文件多少&#xff0c;如果产生很多的redo log 信息&#xff0c;说明负荷量大差生的原因是DML操作太多. 假如oracle database 属于dedicate server&#xff0c;使用top session方式排查数据库性能问题&#xff0c;是比较适合的.根据SESSI…

Python中正则匹配与中文的问题

笔者改写了一个爬虫&#xff0c;来爬取补天SRC的漏洞认领页面&#xff0c;将单位名称、漏洞名称、漏洞危害等级爬取下来&#xff0c;但是在正则匹配"漏洞名称"的过程中遇到了一些麻烦。 如上图&#xff0c;想要把"SQL注入漏洞"字符串正则匹配出来&#xf…

项目/程序的流程走向

领导用户需求前景准备分析(OOA)设计(OOD)实现(OOP)测试部署发布跟踪维护升级新田月会|新细胞|君宁天下|htttp://www.xintianyuehui.cn 作者&#xff1a;宁骑 联系QQ&#xff1a;1075858260转载于:https://www.cnblogs.com/ncellit/p/5491828.html

使用 UIBezierPath 进行简单的图形绘制

这篇文章介绍UIBezierPath的详细的使用, 以及一些细节! 创建一个XTBezierPath继承于UIView的类 使用drawRect 完成图形的绘制 在drawRect方法完成绘制 使用 moveToPoint, addLineToPoint两个方法绘制一个任意多边形 其中w, h 代表自定义View的宽, 高 代码如下: // 初始化一个UI…

利用python实现IP扫描

需求&#xff1a;写一个脚本&#xff0c;判断192.168.11.0/24网络里&#xff0c;当前在线ip有哪些&#xff1f; 知识点: 1 使用subprocess模块&#xff0c;来调用系统命令&#xff0c;执行ping 192.168.11.xxx 命令 2 调用系统命令执行ping命令的时候&#xff0c;会有返回值…

EFQRCode:自动生成花式二维码

原文链接&#xff1a;https://github.com/EyreFree/EFQRCodeEFQRCode&#xff1a;自动生成花式二维码。# 为开源点赞# —— 由SwiftLanguage分享EFQRCode is a tool to generate QRCode UIImage or recognize QRCode from UIImage, in Swift. It is based on CIDetector and CI…

centos删除系统自带的httpd

centos删除系统自带的httpd 1、[rootlocalhost etc]# rpm -qa|grep httpd&#xff0c;查看与httpd相关软件包。 httpd-tools-2.2.15-15.el6.centos.i686 httpd-2.2.15-15.el6.centos.i686 www.2cto.com 2、然后删除httpd&#xff1a; [rootlocalhost etc]# rpm -e httpd 出现问…

[C#]ASP.NET MVC 3 在线学习资料

最近在研究如何把Twitter Bootstrap移植到ASP.NET MVC 3上&#xff0c;攒了点资料&#xff0c;先贴在之里&#xff0c;以后整理了写心得。 1. http://www.codeproject.com/Articles/404633/Transform-ASP-NET-MVC3-Default-Template-with-Twitt 这是一篇介绍如何把默认的ASP.NE…

域渗透提权之MS14-068

0x00 前言 在做渗透测试时&#xff0c;当遇到域环境&#xff0c;获取到一个域成员账号后&#xff0c;如果域控制器未打好补丁&#xff0c;则可以利用本文所提到的漏洞&#xff0c;快速获取到域控制器权限。笔者这里总结网上已有资料&#xff0c;加以描述&#xff0c;希望你能在…

iOS 高可控性日历基础组件 - SKCalendarView 的使用和实现思路的分享

阅读 61收藏 52017-04-02原文链接&#xff1a;http://www.jianshu.com/p/ce4c64a4d437SKCalendarView 是一个高可控性的日历基础组件&#xff0c;为了提高应用的自由度&#xff0c;默认只提供了日历部分的视图封装&#xff0c;但不涵盖切换月份按钮、年月分显示等非关键性控件&…

懒加载 字典转模型 自定义cell

1 懒加载: 1> 什么是懒加载? 懒加载又称为延时加载,即在系统调用的时候加载,如果系统不调用则不会加载.所谓的懒加载其实就是重写其 get 方法. 2> 特点:在使用懒加载的时候要先判断该方法是否已经存在,如果不存在则再进行实例化. 3> 优点: 不必将创建对象的方法都…

SQL GROUP BY 语句

合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句。 GROUP BY 语句 GROUP BY 语句用于结合合计函数&#xff0c;根据一个或多个列对结果集进行分组。 SQL GROUP BY 语法 SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator valu…

docker如何push镜像到docker hub个人的仓库

docker如何push镜像到docker hub个人的仓库 step1——找到本地镜像的ID&#xff1a;docker imagesstep2——登陆Hub&#xff1a;docker login --usernameusername --passwordpassword --emailemailstep3——tag&#xff1a;docker tag <imageID> <namespace>/<…

博客开通第一天,加油

博客开通第一天&#xff0c;加油转载于:https://www.cnblogs.com/tianyang01/p/5499881.html

【iOS 开发】iOS 10.3 如何更换 app 图标

2017-04-06 KyrieXu Cocoa开发者社区iOS 10.3 开放了更换 app 图标的 API&#xff0c;核心方法是下面这个&#xff1a; func setAlternateIconName(_ alternateIconName: String?, completionHandler: ((Error?) -> Void)? nil) 这是官方文档&#xff0c;但是你还需要在…

WordPress qTranslate插件跨站请求伪造漏洞

漏洞名称&#xff1a;WordPress qTranslate插件跨站请求伪造漏洞CNNVD编号&#xff1a;CNNVD-201306-058发布时间&#xff1a;2013-06-07更新时间&#xff1a;2013-06-07危害等级&#xff1a; 漏洞类型&#xff1a;跨站请求伪造威胁类型&#xff1a;远程CVE编号&#xff1a;CV…

ESXi6.5环境搭建(一:VMware Workstations 12 Pro 环境的安装及配置)

实验目的及要求 完成VMware workstations安装&#xff0c;会应用相关操作&#xff1b;完成虚拟机中ESXI6.5平台的安装及网络环境配置&#xff1b;完成VMware vSphere Client 6.0软件在PC端的安装及配置&#xff1b;完成使用浏览器或者VMware vSphere Client 6.0中对ESXI6.5的操…

[vs2008]Visual Studio 2008 SP1添加或删除功能提示查找SQLSysClrTypes.msi文件

前言 今天接到领导布置的一个任务&#xff0c;是之前同事负责的项目。离职了&#xff0c;现在客户有些地方需要修改&#xff0c;由于我之前参与过&#xff0c;就落在我的头上了。 然后我就把代码弄了过来&#xff0c;打开发现其中需要用到水晶报表。&#xff08;我觉得不好用&a…

iOS10.3 的评论系统

作者 xuyafei86 关注 2017.03.30 12:39* 字数 428 阅读 265评论 4喜欢 11iOS10.3 对 App 的评论系统进行了较大的升级。主要在三个方面。 支持 App 内评分 在此之前我们要实现 App 内评分需要使用 SKStoreProductViewController。它只会在 App 内部模态打开在 AppStore 的详情页…

windows 内存泄露和资源泄漏调试

AQTime (有x64、win32的)进行内存泄露和资源泄漏监控http://wenku.baidu.com/view/9aa1c2afdd3383c4bb4cd2c1.html x64下载&#xff1a;http://downlite.net/lp.php?coc&nAutomatedQA.AQTime.v6.21.400.x64.Cracked.WORKING-BRD Windows Leaks Detector&#xff08;好象只…

ESXi6.5环境搭建(二:ESXi 6.5环境的安装及配置)

实验目的及要求 完成VMware workstations安装&#xff0c;会应用相关操作&#xff1b;完成虚拟机中ESXI6.5平台的安装及网络环境配置&#xff1b;完成VMware vSphere Client 6.0软件在PC端的安装及配置&#xff1b;完成使用浏览器或者VMware vSphere Client 6.0中对ESXI6.5的操…