一個邏輯清晰的購物車模型
效果圖
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;</code></pre>
- 這是請求購物車列表成功之后的回調方法,將裝有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;</code></pre>
- 這是請求購物車數據源的方法,大家一般都是對AFNetworking進行二次封裝來請求數據。
- 這是用戶選中了某個產品或某個row的處理方法,因為這會改變底部結算視圖所以一定會回調上文協議中的第二個方法, 下同。
- 這是用戶選中了某個品牌或某個section的處理方法
- 這是用戶改變了商品數量的處理方法
- 這是用戶刪除操作的處理方法
- 這是用戶收藏操作的處理方法,這里沒有回調任何方法,也可以根據需求添加回調方法。
- 這是用戶結算操作的處理方法
有幾個點需要注意:
- BrandModel里邊有兩個成員變量是手動添加進去的:isSelected和selectedArray前者是為了記錄某個品牌或者說某個section是否被選中 后者是結算的時候記錄選中的商品
- ProductModel里邊的isSelected也是手動添加的 也是為了記錄某個商品或者說某個row是否被選中
- Vendor文件夾里邊是一些開源庫 布局依賴Masonry 字典轉模型依賴MJExtension 圖片異步加載依賴SDWebImage 鍵盤的管理依賴IQKeyboardManager 當然你也可以自己處理
- View里邊的回調都是用的Block JVShopcartFormat里邊的回調都是用的delegate 你也可以根據需求自行選擇具體的回調方式
- 雖然購物車大同小異 但是總有些奇葩的需求需要自己去處理 肯定是要根據我的注釋去做一些修改的
項目主頁:http://www.baiduhome.net/lib/view/home/1490683874359
本文由用戶 Marie0192 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!