iOS Developer

iOS 购物车

2017-07-12  本文已影响504人  1剑天下

先看效果图

add.gif

功能需求

  1. 多选,单选,全选,店铺全选
  1. 商店满减活动
  2. 十进制价钱计算
  3. 满X元免运费
  4. 点击商品静如详情,点击店铺跳转店铺主页
  5. 侧滑删除,以及数量添加

首先说明一下数据结构

  1. 购物车CartList下的集合类容


    7B9ABE72-4281-4352-B12E-7137B63A5D46.png
  2. 运费信息


    5447F79C-798F-4781-BF71-01D903BFFC66.png

UI布局

FD87063B-5921-4AE5-94A2-2559721A7101.png

代码部分

NSDecimalNumber:在iOS开发中,和货币价格计算相关的,需要注意计算精度的问题。即使只是两位小数,也会出现误差。使用float类型运算,是完全不够的,NSDecimalNumber这个类是NSNumber的不可变子类。苹果针对浮点型计算时存在精度计算误差的问题而提供的一个计算类,它是基于10进制的定点计算保证了精度不会缺失。同时也可以定制精度的取正类型:向上取正、向下去正、四舍五入等。相对与浮点类型的计算,NSDecimalNumber提供了更加精准的计算。

// 这是整个购物车计算的核心,每一次选中商品,添加,或者删除,都会重新将整个购物车里面的商品取出来,判断是否选中,如果选中加入计算,更改UI
#pragma mark- 计算价钱
-(void)jisuanPrice
{
    self.totalprice = @"0";
    self.Actualprice=@"0";
    self.GoodsSelectCount = 0;
    self.canMadeCoup = @"0";
    for (int i=0; i<self.dataArr.count; i++) {
        
        HPShopCarModel * ShopCarModel =[self.dataArr objectAtIndex:i];
        ShopCarModel.currentSelectprice=@"0";
        for (int m = 0 ; m <ShopCarModel.content.count; m++) {
            
            HPShopdetailModel * modeldetail = [ShopCarModel.content objectAtIndex:m];
            if (modeldetail.isSelect) {
                
                NSDecimalNumber *count = [NSDecimalNumber decimalNumberWithString:modeldetail.count];
                NSDecimalNumber *decimalNumber1 = [[NSDecimalNumber decimalNumberWithString: modeldetail.price] decimalNumberByMultiplyingBy:count];
                NSDecimalNumber *decimalNumber2 = [NSDecimalNumber decimalNumberWithString:ShopCarModel.currentSelectprice];
                //加
                ShopCarModel.currentSelectprice = [[decimalNumber1 decimalNumberByAdding:decimalNumber2] stringValue];
                self.GoodsSelectCount = [modeldetail.count integerValue]+self.GoodsSelectCount;
            }
            
            
        }
        NSDecimalNumber *decimalNumber1 = [NSDecimalNumber decimalNumberWithString: self.totalprice];
        
        NSDecimalNumber *decimalNumber2 = [NSDecimalNumber decimalNumberWithString:ShopCarModel.currentSelectprice];
        NSDecimalNumber *decimalNumber3 = [NSDecimalNumber decimalNumberWithString:ShopCarModel.cut_price];
        //加
        self.totalprice =  [[decimalNumber1 decimalNumberByAdding:decimalNumber2] stringValue];
        
        NSLog(@"ShopCarModel.full_price:%@.....ShopCarModel.currentSelectprice:%@...ShopCarModel.cut_price:%@",ShopCarModel.full_price,ShopCarModel.currentSelectprice,ShopCarModel.cut_price);
        NSDecimalNumber *decimalNumber4 = [NSDecimalNumber decimalNumberWithString:self.Actualprice];
        
        self.Actualprice =[[decimalNumber4 decimalNumberByAdding:decimalNumber2] stringValue];
        
        
        if ([ShopCarModel.full_price doubleValue]<[ShopCarModel.currentSelectprice doubleValue]&&[ShopCarModel.full_price doubleValue]>0) {
            // 计算实际应付的金额,(符合满减条件去掉满减的金额)
            NSDecimalNumber *decimalNumber5 = [NSDecimalNumber decimalNumberWithString:self.Actualprice];
            self.Actualprice =[[decimalNumber5 decimalNumberBySubtracting:decimalNumber3] stringValue];
            self.canMadeCoup = @"1";
            
            
        }
        
        
    }
    
    // 修改底部钱数显示

    
    _BottomView.totalprice = [DJTUtility notRounding: [NSDecimalNumber decimalNumberWithString:self.totalprice] afterPoint:2];
    _BottomView.Actualprice = [DJTUtility notRounding: [NSDecimalNumber decimalNumberWithString:self.Actualprice] afterPoint:2];
    NSLog(@"totalprice:%@=====%@",self.totalprice,[NSString stringWithFormat:@"%.2lf",[self.totalprice floatValue]]);
    [_BottomView.Settlement_btn setTitle:[NSString stringWithFormat:@"结算(%ld)",self.GoodsSelectCount] forState:UIControlStateNormal];
    [self aboutfreihtUI];
}

购物车demo Github下载
https://github.com/LxwYl/XW-ShopCar

京东商品详情 高仿
http://www.jianshu.com/p/c51b1e4b0f8b

上一篇 下一篇

猜你喜欢

热点阅读