iOS_一个购物车的使用

Posted 雅之上善若水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS_一个购物车的使用相关的知识,希望对你有一定的参考价值。

这个项目是本人原创:要转载,请说明下:http://www.cnblogs.com/blogwithstudyofwyn/p/5618107.html

项目的地址:https://github.com/Shangshanroushui/ShoppingCart.git

该程序是个一元夺宝的的购物车。

项目中依然使用的MVC

model:是商品的全部信息

GoodsInfoModel.h

@property(strong,nonatomic)NSString *imageName;//商品图片
@property(strong,nonatomic)NSString *goodsTitle;//商品标题
@property(strong,nonatomic)NSString *goodsPrice;//商品单价
@property(assign,nonatomic)BOOL selectState;//是否选中状态
@property(assign,nonatomic)NSInteger goodsNum;//商品个数
@property(assign,nonatomic)NSInteger allNum;//全部个数
@property(assign,nonatomic)NSInteger remainedNum;//还需个数
-(instancetype)initWithDict:(NSDictionary *)dict;

GoodsInfoModel.m

-(instancetype)initWithDict:(NSDictionary *)dict
{
    if (self = [super init])
    {
        self.imageName = dict[@"imageName"];
        self.goodsTitle = dict[@"goodsTitle"];
        self.goodsPrice = dict[@"goodsPrice"];
        self.goodsNum = [dict[@"goodsNum"]integerValue];
        self.selectState = [dict[@"selectState"]boolValue];
        self.allNum=[dict[@"allNum"]integerValue];
        self.remainedNum=[dict[@"remainedNum"]integerValue];        
    }
    
    return  self;
}

View :1.自定义的一个tableViewCell 2.自定义的一个结算View

ShopCartCell.h  :1.用于展示内容的各种控件 2.自定义了一个协议和代理 3.一个按钮触发事件

PS:英文使用了masonry 自动布局。将需要的一些头文件和宏定义放到pch文件中了。直接导入pch文件了

#import "GoodsInfoModel.h"

//添加代理,用于按钮加减的实现
@protocol ShopCartCellDelegate <NSObject>
-(void)btnClick:(UITableViewCell *)cell andFlag:(int)flag;
@end
@interface ShopCartCell : UITableViewCell
//增加一个view
@property (nonatomic,strong) UIView *mainView;
@property (nonatomic,strong) UIButton *selectBtn;
@property (nonatomic,strong) UIImageView *goodsImg;
@property (nonatomic,strong) UILabel *introductionLab;
@property (nonatomic,strong) UILabel *needLab;
@property (nonatomic,strong) UILabel *needNumLab;
@property (nonatomic,strong) UILabel *remainedLab;
@property (nonatomic,strong) UILabel *remianedNumLab;
@property (nonatomic,strong) UIButton *addBtn;
@property (nonatomic,strong) UITextField *goodsNumTF;
@property (nonatomic,strong) UIButton *minusBtn;
@property (nonatomic,strong) UILabel *winLab;
@property (nonatomic,strong) UILabel *winNumLab;
@property(assign,nonatomic)BOOL selectState;//选中状态
//赋值
-(void)addTheValue:(GoodsInfoModel *)goodsModel;
@property(assign,nonatomic)id<ShopCartCellDelegate>delegate;

ShopCartCell.m


 #import "SC.pch"

@interface ShopCartCell()

@end
@implementation ShopCartCell

- (void)awakeFromNib {
    // Initialization code
}
-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
//        self.layer.borderColor = [UIColor redColor].CGColor;
//        self.layer.borderWidth = 1;
        [self setSelectionStyle:UITableViewCellSelectionStyleNone];
//        self.backgroundColor=[UIColor colorWithRed:234/255.0 green:234/255.0 blue:234/255.0 alpha:0.5];
//        [self setSeparatorInset:UIEdgeInsetsMake(0, 60, 0, 0)];
        UIView *mainView=[[UIView alloc]init];
        [self.contentView addSubview:mainView];
        mainView.backgroundColor=[UIColor whiteColor];
        self.mainView=mainView;
        
        UIButton *selectBtn = [[UIButton alloc]init];
        [self.mainView addSubview:selectBtn];
        [selectBtn setImage:[UIImage imageNamed:@"1"] forState:UIControlStateNormal];
        [selectBtn setImage:[UIImage imageNamed:@"5"]forState:UIControlStateSelected];
        [selectBtn addTarget:self action:@selector(selectBtnAction:) forControlEvents:UIControlEventTouchUpInside];
        selectBtn.tag=13;
        self.selectBtn=selectBtn;

        
        UIImageView *goodsImg = [[UIImageView alloc]init];
        [self.mainView addSubview:goodsImg];
//        goodsImg.image = [UIImage imageNamed:@"4"];
        self.goodsImg=goodsImg;
        
        UILabel *introductionLab = [[UILabel alloc]init];
        [introductionLab setFont:[UIFont systemFontOfSize:17.0]];
        [self.mainView addSubview:introductionLab];
//        introductionLab.text=@"[111111111]";
        introductionLab.textColor=[UIColor grayColor];
        self.introductionLab=introductionLab;
        
        UILabel *needLab = [[UILabel alloc]init];
        [needLab setFont:[UIFont systemFontOfSize:13.0]];
        [self.mainView addSubview:needLab];
        needLab.text=@"总需:";
        needLab.textColor=[UIColor grayColor];
        self.needLab=needLab;
        
        
        UILabel *needNumLab = [[UILabel alloc]init];
        [needNumLab setFont:[UIFont systemFontOfSize:13.0]];
        [self.mainView addSubview:needNumLab];
//        needNumLab.text=@"1000";
        needNumLab.textColor=[UIColor grayColor];
        self.needNumLab=needNumLab;
        
        
        UILabel *remainedLab = [[UILabel alloc]init];
        [remainedLab setFont:[UIFont systemFontOfSize:13.0]];
        [self.mainView addSubview:remainedLab];
        remainedLab.textColor=[UIColor grayColor];
        remainedLab.text=@"剩余:";
        self.remainedLab=remainedLab;
        
        UILabel *remianedNumLab = [[UILabel alloc]init];
        [remianedNumLab setFont:[UIFont systemFontOfSize:13.0]];
        [self.mainView addSubview:remianedNumLab];
//        remianedNumLab.text=@"999";
        remianedNumLab.textColor=[UIColor redColor];
        self.remianedNumLab=remianedNumLab;
        
        
        UIButton *minusBtn = [[UIButton alloc]init];
        [self.mainView addSubview:minusBtn];
        [minusBtn setImage:[UIImage imageNamed:@"2"] forState:UIControlStateNormal];
        [minusBtn addTarget:self action:@selector(deleteBtnAction:) forControlEvents:UIControlEventTouchUpInside];
        minusBtn.tag = 11;
        self.minusBtn=minusBtn;
        
        UITextField *goodsNumTF = [[UITextField alloc]init];
        [self.mainView addSubview:goodsNumTF];
        goodsNumTF.textAlignment=NSTextAlignmentCenter;
//        goodsNumTF.text=@"10";
        goodsNumTF.backgroundColor=[UIColor grayColor];
        self.goodsNumTF=goodsNumTF;
        
        UIButton *addBtn = [[UIButton alloc]init];
        [self.mainView addSubview:addBtn];
        [addBtn setImage:[UIImage imageNamed:@"3"] forState:UIControlStateNormal];
        [addBtn addTarget:self action:@selector(addBtnAction:) forControlEvents:UIControlEventTouchUpInside];
        addBtn.tag = 12;
        self.addBtn=addBtn;

        
        UILabel *winLab = [[UILabel alloc]init];
        [winLab setFont:[UIFont systemFontOfSize:14.0]];
        [self.mainView addSubview:winLab];
        winLab.text=@"中奖概率";
        winLab.textColor=[UIColor grayColor];
        self.winLab=winLab;
        
        UILabel *winNumLab = [[UILabel alloc]init];
        [winNumLab setFont:[UIFont systemFontOfSize:14.0]];
        [self.mainView addSubview:winNumLab];
        winNumLab.text=@"100%";
        winNumLab.textColor=[UIColor grayColor];
        self.winNumLab=winNumLab;
        
    }
    return self;
}
/**
 
 *  给单元格赋值
 
 *
 
 *  @param goodsModel 里面存放各个控件需要的数值
 
 */

-(void)addTheValue:(GoodsInfoModel *)goodsModel
{
    self.goodsImg.image = [UIImage imageNamed:goodsModel.imageName];
    self.introductionLab.text = goodsModel.goodsTitle;
    self.needNumLab.text = [NSString stringWithFormat:@"%ld",(long)goodsModel.allNum];
    self.remianedNumLab.text = [NSString stringWithFormat:@"%ld",(long)goodsModel.remainedNum];
    self.goodsNumTF.text=[NSString stringWithFormat:@"%ld",(long)goodsModel.goodsNum];

    if (goodsModel.selectState){
        self.selectState = YES;
        [self.selectBtn setImage:[UIImage imageNamed:@"5"] forState:UIControlStateNormal];
    }else{
        
         self.selectState = NO;
        [self.selectBtn setImage:[UIImage imageNamed:@"1"] forState:UIControlStateNormal];
    }
}
//
-(void)selectBtnAction:(UIButton *)sender{

    [self.delegate btnClick:self andFlag:(int)sender.tag];
}
//
-(void)deleteBtnAction:(UIButton *)sender{
//    NSInteger goodsNum=[self.goodsNumTF.text integerValue];
//    if (goodsNum>1) {
//        goodsNum-=1;
//        self.goodsNumTF.text=[NSString stringWithFormat:@"%ld",(long)goodsNum];
//        NSInteger remianedNum=[self.remianedNumLab.text integerValue]+1;
//        self.remianedNumLab.text=[NSString stringWithFormat:@"%ld",(long)remianedNum];
//    }
    ////////
    //判断是否选中,选中才能点击
    if (self.selectState == YES)
    {
        //调用代理
        [self.delegate btnClick:self andFlag:(int)sender.tag];
    }
}

-(void)addBtnAction:(UIButton *)sender{
//    NSInteger goodsNum=[self.goodsNumTF.text integerValue];
//    if ([self.remianedNumLab.text integerValue]>0) {
//        goodsNum+=1;
//        self.goodsNumTF.text=[NSString stringWithFormat:@"%ld",(long)goodsNum];
//        NSInteger remianedNum=[self.remianedNumLab.text integerValue]-1;
//        self.remianedNumLab.text=[NSString stringWithFormat:@"%ld",(long)remianedNum];
//    }
    ///////
    if (self.selectState == YES)
    {
        //调用代理
        [self.delegate btnClick:self andFlag:(int)sender.tag];
    }
}
-(void)layoutSubviews
{
    [super layoutSubviews];
    WEAKSELF(weakSelf);
    [self.mainView mas_makeConstraints:^(MASConstraintMaker *make) {
//        make.center.mas_equalTo(weakSelf).offset(0);
        make.left.and.right.mas_equalTo(0);
        make.top.and.bottom.mas_equalTo(weakSelf).offset(10);
    }];
    [self.selectBtn mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.mas_equalTo(weakSelf.mainView.mas_centerY).offset(0);
        make.left.mas_equalTo(10);
        //make.height.and.width.mas_equalTo(17);
        make.height.mas_equalTo(17);
        make.width.mas_equalTo(17);
    }];
    
    [self.goodsImg mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.mas_equalTo(weakSelf.mainView.mas_centerY).offset(0);
        make.left.mas_equalTo(weakSelf.selectBtn.mas_right).offset(10);
        //make.height.and.width.mas_equalTo(17);
        make.height.mas_equalTo(70);
        make.width.mas_equalTo(70);
    }];
    
    [self.introductionLab mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(weakSelf.mainView.mas_top).offset(10);
        make.left.mas_equalTo(weakSelf.goodsImg.mas_right).offset(10);
        make.right.mas_equalTo(weakSelf.mas_right).offset(0);
        make.height.mas_equalTo(20);
    }];

    [self.needLab mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(weakSelf.introductionLab.mas_bottom).offset(10);
        make.left.mas_equalTo(weakSelf.introductionLab).offset(0);
        make.height.mas_equalTo(20);
        make.width.mas_equalTo(40);
    }];

    [self.needNumLab mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(weakSelf.needLab).offset(0);
        make.left.mas_equalTo(weakSelf.needLab.mas_right).offset(0);
        make.height.mas_equalTo(weakSelf.needLab.mas_height).offset(0);
        make.width.mas_equalTo(60);
    }];

    [self.remainedLab mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(weakSelf.needLab).offset(0);
        make.left.mas_equalTo(weakSelf.needNumLab.mas_right).offset(10);
        make.height.mas_equalTo(weakSelf.needLab.mas_height);
        make.width.mas_equalTo(40);
    }];

    [self.remianedNumLab mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(weakSelf.needLab).offset(0);
        make.left.mas_equalTo(weakSelf.remainedLab.mas_right).offset(0);
        make.height.mas_equalTo(weakSelf.needLab.mas_height);
        make.width.mas_equalTo(60);
    }];
    [self.minusBtn mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(weakSelf.needLab.mas_bottom).offset(10);
        make.left.mas_equalTo(weakSelf.introductionLab).offset(0);
        make.height.mas_equalTo(24);
        make.width.mas_equalTo(24);
    }];
    ////////////////
    
    [self.winLab mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(weakSelf.minusBtn).offset(0);
        make.right.mas_equalTo(weakSelf.mas_right).offset(-50);
        make.height.mas_equalTo(10);
        make.width.mas_equalTo(60);
    }];
    
    [self.winNumLab mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(weakSelf.winLab.mas_bottom).offset(5);
        make.right.mas_equalTo(weakSelf.winLab).offset(0);
        make.height.mas_equalTo(weakSelf.winLab);
        make.width.mas_equalTo(weakSelf.winLab);
    }];
    [self.addBtn mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(weakSelf.minusBtn).offset(0);
        make.right.mas_equalTo(weakSelf.winLab.mas_left).offset(-20);
        make.height.mas_equalTo(weakSelf.minusBtn);
        make.width.mas_equalTo(weakSelf.minusBtn);
    }];

    [self.goodsNumTF mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(weakSelf.minusBtn).offset(0);
        make.right.mas_equalTo(weakSelf.addBtn.mas_left).offset(-10);
        make.left.mas_equalTo(weakSelf.minusBtn.mas_right).offset(10);
        make.height.mas_equalTo(weakSelf.minusBtn);
    }];
}

 

SettlementView.h  一个结算的view ,用于显示选择的个数和金额,以及里那个按钮:全选和结算按钮。

@interface SettlementView : UIView
@property(nonatomic,strong)UIButton*allSelecteBtn;
@property(nonatomic,strong)UILabel*allSelecteLab;//全选
@property(nonatomic,strong)UILabel*sumLab;//总价
@property(nonatomic,strong)UILabel*goodsNumLab;//商品数
@property(nonatomic,strong)UIButton *statementBtn;//结算
@end

SettlementView.m 

#import "SC.pch"
@implementation SettlementView

-(instancetype)initWithFrame:(CGRect)frame{
    self=[super initWithFrame:frame];
    if (self){
        [self setupUI];
    }
    return self;
}
-(void)setupUI{
    self.backgroundColor=[UIColor whiteColor];
    self.layer.borderColor = [UIColor grayColor].CGColor;
    self.layer.borderWidth = 0.5;
    //全选按钮
    //self.allSelecteBtn
    UIButton *allSelecteBtn=[[UIButton alloc]init];
    [self addSubview:allSelecteBtn];
    [allSelecteBtn addTarget:self action:@selector(selectBtnAction:) forControlEvents:UIControlEventTouchUpInside];
    _allSelecteBtn=allSelecteBtn;
    
    [self.allSelecteBtn setImage:[UIImage imageNamed:@"1"] forState:UIControlStateNormal];
//    [self.allSelecteBtn setImage:[UIImage imageNamed:@"5"] forState:UIControlStateSelected];

    self.allSelecteLab=[[UILabel alloc]init];
    [self addSubview:self.allSelecteLab];
    self.allSelecteLab.text=@"全选";
    self.allSelecteLab.font=[UIFont systemFontOfSize:14.0];
    
    self.sumLab=[[UILabel alloc]init];
    [self addSubview:self.sumLab];
    self.sumLab.text=@"0 元";
    self.sumLab.textColor=[UIColor redColor];
    self.allSelecteLab.font=[UIFont systemFontOfSize:16.0];
    
    self.goodsNumLab=[[UILabel alloc]init];
    [self addSubview:self.goodsNumLab];
    self.goodsNumLab.text=@"共计:0 件商品";
    self.goodsNumLab.font=[UIFont systemFontOfSize:12.0];
    
    //全选按钮
    self.statementBtn=[[UIButton alloc]init];
    [self addSubview:self.statementBtn];
    [self.statementBtn setBackgroundColor:[UIColor redColor]];
    [self.statementBtn setTitle:@"结算" forState:UIControlStateNormal];    
}
-(void)selectBtnAction:(UIButton *)sender{
    
    //[self.delegate btnClick:self andFlag:(int)sender.tag];
}
- (void)layoutSubviews
{
    [super layoutSubviews];
    WEAKSELF(weakSelf);
    [self.allSelecteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.mas_equalTo(weakSelf.mas_centerY).offset(0);
        make.left.mas_equalTo(weakSelf).offset(10);
        make.height.mas_equalTo(17);
        make.width.mas_equalTo(17);
    }];

    [self.allSelecteLab mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.mas_equalTo(weakSelf.mas_centerY).offset(0);
        make.left.mas_equalTo(weakSelf.allSelecteBtn.mas_right).offset(5);
        make.width.mas_equalTo(40);
        make.height.mas_equalTo(40);
    }];
    [self.sumLab mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(5);
        make.left.mas_equalTo(weakSelf.allSelecteLab.mas_right).offset(20);
        make.height.mas_equalTo(20);
        make.width.mas_equalTo(100);
    }];
    [self.goodsNumLab mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(weakSelf.sumLab.mas_bottom).offset(5);
        make.left.mas_equalTo(weakSelf.sumLab);
        make.height.mas_equalTo(weakSelf.sumLab);
        make.width.mas_equalTo(weakSelf.sumLab);
    }];
    [self.statementBtn mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.mas_equalTo(weakSelf.mas_centerY).offset(0);
        make.right.mas_equalTo(weakSelf.mas_right).offset(-5);
        make.height.mas_equalTo(30);
        make.width.mas_equalTo(100);
    }];
}

 

Controller:

ShopCartViewController.h

ShopCartViewController.m  

项目最核心:选择商品,添加,减少等,以及在这个操作中结算View的变化。

#import "ShopCartViewController.h"
#import "ShopCartCell.h"
#import "SC.pch"
#import "SettlementView.h"
#import "GoodsInfoModel.h"

#import "StatementViewController.h"
@interface ShopCartViewController ()<UITableViewDataSource,UITableViewDelegate,ShopCartCellDelegate>
@property(nonatomic,strong)UITableView *goodsTableView;
@property(nonatomic,strong)SettlementView *settlementView;
@property(nonatomic,assign)NSInteger allPrice;
@property(nonatomic,assign)NSInteger goodsNum;;
@property(nonatomic,strong)NSMutableArray *infoArr;;
@end
@implementation ShopCartViewController

- (void)viewDidLoad {
    [super viewDidLoad];
//    self.view.backgroundColor=[UIColor colorWithRed:234/255.0 green:234/255.0 blue:234/255.0 alpha:1];
    [self setInfo];
    [self setGoodsTableView];
    [self setupSettlement];

}
-(void)setInfo{
    self.allPrice=0;
    self.goodsNum = 0;
    self.infoArr = [[NSMutableArray alloc]init];
    /**
     
     *  初始化一个数组,数组里面放字典。字典里面放的是单元格需要展示的数据
     
     */
    
    for (int i = 0; i<7; i++)
        
    {
        
        NSMutableDictionary *infoDict = [[NSMutableDictionary alloc]init];
        
        [infoDict setValue:@"4.png" forKey:@"imageName"];
        
        [infoDict setValue:@"这是商品标题" forKey:@"goodsTitle"];
        
//        [infoDict setValue:@"2000" forKey:@"goodsPrice"];
        
        [infoDict setValue:[NSNumber numberWithBool:NO] forKey:@"selectState"];
        
        [infoDict setValue:[NSNumber numberWithInt:1] forKey:@"goodsNum"];
        /*
         @property(assign,nonatomic)int allNum;
         
         @property(assign,nonatomic)int remainedNum;
         */
        [infoDict setValue:[NSNumber numberWithInt:1000] forKey:@"allNum"];
        [infoDict setValue:[NSNumber numberWithInt:999] forKey:@"remainedNum"];
        
        //封装数据模型
        GoodsInfoModel *goodsModel = [[GoodsInfoModel alloc]initWithDict:infoDict];
        
        //将数据模型放入数组中
        
        [self.infoArr addObject:goodsModel];
        
    }
}
-(void)setupSettlement{
    SettlementView *settlementView=[[SettlementView alloc]initWithFrame:CGRectMake(0, kScreen_Height-100, kScreen_Width, 60)];
    [settlementView.statementBtn addTarget:self action:@selector(goStatement) forControlEvents:UIControlEventTouchUpInside];
    
    [settlementView.allSelecteBtn addTarget:self action:@selector(goAllSelect:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:settlementView];
    self.settlementView=settlementView;
    
    
}
-(void)setGoodsTableView{
    UITableView *goodsTableView=[[UITableView alloc]initWithFrame:CGRectMake(0, 0, kScreen_Width, kScreen_Height-20)];//0, 44, kScreen_Width, kScreen_Height-20)
    [self.view addSubview:goodsTableView];
    goodsTableView.showsHorizontalScrollIndicator=NO;
    goodsTableView.showsVerticalScrollIndicator=NO;
//    goodsTableView.backgroundColor=[UIColor colorWithRed:234/255.0 green:234/255.0 blue:234/255.0 alpha:1];
    goodsTableView.backgroundColor=[UIColor redColor];
    goodsTableView.delegate=self;
    goodsTableView.dataSource=self;
    [goodsTableView registerClass:[ShopCartCell class] forCellReuseIdentifier:@"SCCell"];
//    [goodsTableView registerNib:[UINib nibWithNibName:@"ShopCartTableCell" bundle:nil] forCellReuseIdentifier:@"SCCell"];
    goodsTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    self.goodsTableView=goodsTableView;
}

#pragma mark-------
#pragma mark--------tableViewDelegate
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *SCCell =  @"SCCell";
    ShopCartCell *cell=[tableView dequeueReusableCellWithIdentifier:SCCell forIndexPath:indexPath];
    if (!cell){
        cell=[[ShopCartCell alloc]initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:SCCell];
    }
    cell.delegate = self;
    [cell addTheValue:self.infoArr[indexPath.row]];
    return cell;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 120;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return self.infoArr.count;
}

#pragma mark -- 实现加减按钮点击代理事件
/**
 *  实现加减按钮点击代理事件
 *
 *  @param cell 当前单元格
 *  @param flag 按钮标识,11 为减按钮,12为加按钮
 */
-(void)btnClick:(UITableViewCell *)cell andFlag:(int)flag{
    NSIndexPath *index = [self.goodsTableView indexPathForCell:cell];
    switch (flag) {
        case 11:
        {
            //做减法
            //先获取到当期行数据源内容,改变数据源内容,刷新表格
            GoodsInfoModel *model = self.infoArr[index.row];
            if (model.goodsNum > 1)
            {
                model.goodsNum --;
                model.remainedNum++;
            }
           // [self.goodsTableView reloadRowsAtIndexPaths:@[index] withRowAnimation:UITableViewRowAnimationAutomatic];
        }
            break;
        case 12:
        {
            //做加法
            GoodsInfoModel *model = self.infoArr[index.row];
            if (model.remainedNum>0) {
                model.remainedNum --;
                model.goodsNum++;
            }
            //[self.goodsTableView reloadRowsAtIndexPaths:@[index] withRowAnimation:UITableViewRowAnimationAutomatic];
        }
            break;
        case 13:
        {    //先获取到当期行数据源内容,改变数据源内容,刷新表格
            GoodsInfoModel *model = self.infoArr[index.row];
            if (model.selectState)            {
                model.selectState = NO;
            }else {
                model.selectState = YES;

            }
            //刷新当前行
            //[self.goodsTableView reloadRowsAtIndexPaths:@[index] withRowAnimation:UITableViewRowAnimationAutomatic];
        }
        default:
            break;
    }
    //刷新表格
    [self.goodsTableView reloadData];
    
    //计算总价
    [self totalPrice];
    
}
#pragma mark -- 计算价格
-(void)totalPrice
{
    //遍历整个数据源,然后判断如果是选中的商品,就计算价格(单价 * 商品数量)
    for ( int i =0; i<self.infoArr.count; i++)    {
        GoodsInfoModel *model = [self.infoArr objectAtIndex:i];
        if (model.selectState)
        {
            self.allPrice +=  model.goodsNum ;//[model.goodsPrice intValue];
            self.goodsNum +=model.goodsNum;
        }
    }
    //给总价文本赋值
    self.settlementView.sumLab.text = [NSString stringWithFormat:@"%ld 元",(long)self.allPrice];
    self.settlementView.goodsNumLab.text=[NSString stringWithFormat:@"共计:%ld 件商品 ",(long)self.goodsNum];
    //每次算完要重置为0,因为每次的都是全部循环算一遍
    self.allPrice = 0;
    self.goodsNum = 0;
}
//结算
-(void)goStatement{
    NSInteger total=[self.settlementView.sumLab.text integerValue];
    if (total>0) {
        StatementViewController *statementVC=[[StatementViewController alloc]init];
        statementVC.price=total;
        [self.navigationController pushViewController:statementVC animated:YES];
        
    }
}
//全选
-(void)goAllSelect:(UIButton *)sender{
    //判断是否选中,是改成否,否改成是,改变图片状态
    sender.tag = !sender.tag;
    if (sender.tag)    {
        [sender setImage:[UIImage imageNamed:@"5.png"] forState:UIControlStateNormal];
        
    }else{
        [sender setImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal];
    }
    //改变单元格选中状态
    for (int i=0; i<self.infoArr.count; i++)
    {
        GoodsInfoModel *model = [self.infoArr objectAtIndex:i];
        model.selectState = sender.tag;
    }
    //计算价格
    [self totalPrice];
    //刷新表格
    [self.goodsTableView reloadData];

}

 

StatementViewController.h 结算试图

@property(nonatomic,assign)NSInteger price;//总价

StatementViewController.m

#import "StatementViewController.h"
#import "SC.pch"
@interface StatementViewController ()
@end

@implementation StatementViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor=[UIColor whiteColor];
    
    UILabel *allPrice=[[UILabel alloc]initWithFrame:CGRectMake(100, 100, 100, 160)];
    allPrice.text= [NSString stringWithFormat:@"-----%ld-------",(long)self.price];
    [self.view addSubview:allPrice];
    
}

 

以上是关于iOS_一个购物车的使用的主要内容,如果未能解决你的问题,请参考以下文章

iOS代码片段CodeSnippets

如何使用 Swift 使用此代码片段为 iOS 应用程序初始化 SDK?

如何从 recyclerview 片段传递到另一个 recyclerview 片段

iOS开发CGRectGetMidX. CGRectGetMidY.CGRectGetMinY. CGRectGetMaxY. CGRectGetMinX. CGRectGetMaxX的使用(代码片段

IOS开发-OC学习-常用功能代码片段整理

iOS开发CGRectGetMidX. CGRectGetMidY.CGRectGetMinY. CGRectGetMaxY. CGRectGetMinX. CGRectGetMaxX的使用(代码片段