一個邏輯清晰的購物車模型

GitHub: https://github.com/lll1024/JVShopcartgit

效果圖

2017-03-25 18.28.23.gif

說明

這是一個具有常規功能並方便改造的購物車模型 一共包含五個模塊:github

  • JVShopcartViewController: 購物車控制器 負責協調Model和View 只有100多行代碼數組

  • JVShopcartFormat: 負責網絡請求與邏輯處理網絡

  • JVShopcartTableViewProxy: 做爲控制器裏邊TableView的代理異步

  • View: 包括Cell、HeaderView、CountView(改變商品數的視圖)、BottomView(控制器底部包含結算按鈕的視圖)佈局

  • Model: 包含BrandModel和ProductModel兩層ui

使用

首先將工程裏邊的JVShopcart文件夾拖入你的項目 而後就是開源庫Vendor文件夾根據需求處理 Model是必定會改的 可是購物車的Model大同小異 其餘的改動不會太大 spa

關於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。code

  • 這是用戶在操做了單選、多選、全選、刪除這些會改變底部結算視圖裏邊的全選按鈕狀態、商品總價和商品數的統一回調方法,這條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

相關文章
相關標籤/搜索