zoukankan      html  css  js  c++  java
  • Purchase购物车实例分析

    源代码下载地址:http://code4app.com/ios/55655def933bf09d328b5141

     

    此源代码从中学到以下四个知识点

    第一:关于右边只有一个被选中的效果展现,左边部分代码内容,其是一个列表的形式,橙色为一个视图的效果,当没有被选中时则隐藏起来,这边默认第一个被选中;

    单元格BADockCell.h
    
    #import <UIKit/UIKit.h>
    @interface BADockCell : UITableViewCell
    @property (nonatomic ,weak) NSString *categoryText;
    @property (nonatomic ,weak) UILabel *category;
    @property (nonatomic ,weak) UIView *viewShow1;
    + (instancetype)cellWithTableView:(UITableView *)tableView;
    @end
    
    .m文件内容:
    
    #import "BADockCell.h"
    #import "Header.h"
    @interface BADockCell ()
    @end
    
    
    @implementation BADockCell
    
    -(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
    {
        self =[super initWithStyle:style reuseIdentifier:reuseIdentifier];
        if (self) {
            UILabel *category =[[UILabel alloc]initWithFrame:(CGRect){0,0,75,50}];
            [self.contentView addSubview:category];
            _category=category;
            
            UIView *viewShow =[[UIView alloc]initWithFrame:(CGRect){0,49.5,75,0.5}];
            viewShow.backgroundColor=[UIColor blackColor];
            viewShow.alpha=0.4;
            [self.contentView addSubview:viewShow];
            UIView *viewShow1 =[[UIView alloc]initWithFrame:(CGRect){0,0,2,50}];
            viewShow1.backgroundColor=UIColorRGBA(255, 127, 0, 1);
            [self.contentView addSubview:viewShow1];
            
            viewShow1.hidden=YES;
            _viewShow1=viewShow1;
        }
        return self;
    }
    
    -(void)setCategoryText:(NSString *)categoryText
    {
        _category.text=categoryText;
        _category.textAlignment=NSTextAlignmentCenter;
        _category.font=Font(16);
        
    }
    
    + (instancetype)cellWithTableView:(UITableView *)tableView
    {
        static NSString *ID = @"BADockCell";
        BADockCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
        if (cell == nil) {
            cell = [[BADockCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
            //取消选中状态
            [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
        }
        return cell;
    }
    @end
    
    
    注意:+ (instancetype)cellWithTableView:(UITableView *)tableView在这边对CELL进行注册,然后在UITableView外面加载列时进行调用BADockCell *cell =[BADockCell cellWithTableView:tableView];


    . h文件的内容(继承于UITableView)
    
    #import <UIKit/UIKit.h>
    @protocol DockTavleViewDelegate <NSObject>
    -(void)dockClickindexPathRow:(NSMutableArray *)row  index:(NSIndexPath *)index indeXPath:(NSIndexPath *)indexPath;
    @end
    
    @interface BAWineShoppingDockTavleView : UITableView
    @property (nonatomic ,strong) NSMutableArray *dockArray;
    @property (weak ,nonatomic) id <DockTavleViewDelegate>dockDelegate;
    @end
    
    .m文件的内容
    
    #import "BAWineShoppingDockTavleView.h"
    #import "BADockCell.h"
    #import "Header.h"
    @interface BAWineShoppingDockTavleView ()<UITableViewDelegate,UITableViewDataSource>
    
    @property (nonatomic ,strong) NSIndexPath *path;
    @property (nonatomic ,assign) BOOL is;
    @end
    
    @implementation BAWineShoppingDockTavleView
    
    
    -(id)initWithFrame:(CGRect)frame
    {
        self =[super initWithFrame:frame];
        if (self) {
            self.dataSource=self;
            self.delegate=self;
        }
        return self;
    }
    
    -(void)layoutSubviews
    {
        [super layoutSubviews];
        //只让它在初始化运行 运行一次_is就不为空了 给表格进行绑定
        if(!_is)
        {
            NSInteger selectedIndex = 0;
            NSIndexPath *selectedIndexPath = [NSIndexPath indexPathForRow:selectedIndex inSection:0];
            [self tableView:self didSelectRowAtIndexPath:selectedIndexPath];
            _is=YES;
        }
    }
    
    -(void)setDockArray:(NSMutableArray *)dockArray
    {
        _dockArray=dockArray;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return _dockArray.count;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        //这样方式的加载内容不错
        BADockCell *cell =[BADockCell cellWithTableView:tableView];
        cell.categoryText=_dockArray[indexPath.row][@"dockName"];
        cell.backgroundColor=[UIColor whiteColor];
        return cell;
    }
    
    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if (_path!=nil) {
            NSLog(@"上一个被选中%zd",_path.row);
            BADockCell *cell = (BADockCell *)[tableView cellForRowAtIndexPath:_path];
            cell.backgroundColor=[UIColor whiteColor];
            cell.category.textColor=[UIColor blackColor];
            cell.viewShow1.hidden=YES;
        }
        if ([_dockDelegate respondsToSelector:@selector(dockClickindexPathRow:  index: indeXPath:)]) {
            [_dockDelegate dockClickindexPathRow:_dockArray[indexPath.row][@"right"]  index:_path indeXPath:indexPath];
        }
        //取消选中颜色
    
        BADockCell *cell = (BADockCell *)[tableView cellForRowAtIndexPath:indexPath];
        cell.category.textColor=UIColorRGBA(255, 127, 0, 1);
        cell.backgroundColor=UIColorRGBA(246, 246, 246, 1);
        cell.viewShow1.hidden=NO;
        _path=indexPath;
        NSLog(@"选中%zd",_path.row);
    }
    @end

     

    注意:对于_is变量只是用于第一次默认加载时,判断它并让其对第一个进行选中,最后进行赋值,这样就可以避免在表格绑定列时再进行判断的问题,而_path变量则是为了把选中的值赋给它,在didSelectRowAtIndexPath中一开始对它进行是否为空的判断,这样就可以清理掉上一次的选中;

    第二:关于左边选中后右边进行更新,它还有一个效果是右边会刷新从顶部回到第一条,代码简单如下

    @property (nonatomic ,strong) BAWineShoppingDockTavleView *dockTavleView;
    @property (nonatomic ,strong) BARightTableView *rightTableView;
    @property (nonatomic ,strong) NSMutableArray *dockArray;
    @property (nonatomic ,strong) NSMutableArray *offsArray;
    
    -(void)viewDidLoad
    {
          BAWineShoppingDockTavleView *dockTavleView =[[BAWineShoppingDockTavleView alloc]initWithFrame:(CGRect){0,0,75,kWindowHeight-50}];
        dockTavleView.rowHeight=50;
        dockTavleView.dockDelegate=self;
        dockTavleView.backgroundColor=UIColorRGBA(238, 238, 238, 1);
        [dockTavleView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
        [self.view addSubview:dockTavleView];
        _dockTavleView =dockTavleView;
        
        BARightTableView *rightTableView =[[BARightTableView alloc]initWithFrame:(CGRect){75,0,kWindowWidth-75,kWindowHeight-50}];
        rightTableView.rowHeight=90;
        rightTableView.rightDelegate=self;
        rightTableView.backgroundColor=UIColorRGBA(238, 238, 238, 1);
        [rightTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
        [self.view addSubview:rightTableView];
        _rightTableView=rightTableView;
    }
    
    -(void)dockClickindexPathRow:(NSMutableArray *)array index:(NSIndexPath *)index indeXPath:(NSIndexPath *)indexPath
    {
        [_rightTableView setContentOffset:_rightTableView.contentOffset animated:NO];
        _offsArray[index.row] =NSStringFromCGPoint(_rightTableView.contentOffset);
        _rightTableView.rightArray=array;
        [_rightTableView reloadData];
        CGPoint point=CGPointFromString([_offsArray objectAtIndex:indexPath.row]);
        [_rightTableView setContentOffset:point];
    }

    第三:关于右边列增加或减少数量时,下面部分变化则是运用的回调的方式实现;在单元列中定义的一个回调,在右边的表格上进行一个委托,然后在主页面上进行实现变化的内容;

    右边列.h文件:
    
    #import <UIKit/UIKit.h>
    
    @interface BARightCell : UITableViewCell
    @property (nonatomic ,strong) NSMutableDictionary *rightData;
    + (instancetype)cellWithTableView:(UITableView *)tableView;
    @property (nonatomic , copy) void (^TapActionBlock)(NSInteger pageIndex ,NSInteger money ,NSString *key);
    @end
    
    右边列.m文件(主要代码):
    
    -(void)wineRightClick
    {
        int NumberInt =[_wineQuantity.text intValue];
        if (NumberInt ==99) {
            return;
        }
        ++NumberInt;
        
         _wineQuantity.text =[NSString stringWithFormat:@"%d",NumberInt];
        _rightData[@"Quantity"] = _wineQuantity.text;
        _TapActionBlock([ _rightData[@"Quantity"] integerValue],[_rightData[@"money"] integerValue] ,_rightData[@"ProductID"]);
    }
    
    -(void)wineLeftClick
    {
        int NumberInt =[_wineQuantity.text intValue];
        if (NumberInt ==0) {
            return;
        }
        --NumberInt;
        _wineQuantity.text =[NSString stringWithFormat:@"%d",NumberInt];
        _rightData[@"Quantity"] = _wineQuantity.text;
        _TapActionBlock([ _rightData[@"Quantity"] integerValue],[_rightData[@"money"] integerValue],_rightData[@"ProductID"]);
        if (NumberInt ==0) {   
            return;
        }
        
    }
    
    右边表格的.h:
    
    @protocol RightTableViewDelegate <NSObject>
    -(void)quantity:(NSInteger)quantity money:(NSInteger)money key:(NSString *)key;
    @end
    @interface BARightTableView : UITableView
    @property (nonatomic ,strong) NSMutableArray *rightArray;
    @property (nonatomic ,weak) id<RightTableViewDelegate>rightDelegate;
    @end
    
    右边表格的.m:
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        BARightCell *cell =[BARightCell cellWithTableView:tableView];
        cell.TapActionBlock=^(NSInteger pageIndex ,NSInteger money,NSString *key){
            if ([self.rightDelegate respondsToSelector:@selector(quantity:money:key:)]) {
                [self.rightDelegate quantity:pageIndex money:money key:key];
            }
        };
        cell.backgroundColor=UIColorRGBA(246, 246, 246, 1);
        cell.rightData=_rightArray[indexPath.row];
        return cell;
    }
    
    主页面实现在变化(rightTableView.rightDelegate=self):
    
    -(void)quantity:(NSInteger)quantity money:(NSInteger)money key:(NSString *)key
    {
        NSInteger addend  =quantity *money;
        
        [_dic setObject:[NSString stringWithFormat:@"%ld",addend] forKey:key];
        //得到词典中所有KEY值
        NSEnumerator * enumeratorKey = [_dic keyEnumerator];
        //遍历所有KEY的值
        NSInteger total=0;
        NSInteger totalSingularInt=0;
        for (NSObject *object in enumeratorKey) {
            total+=[_dic[object] integerValue];
            if ([_dic[object] integerValue] !=0) {
                totalSingularInt +=1;
                _totalSingular.hidden=NO;
            }
        }
        if (totalSingularInt==0) {
            _totalSingular.hidden=YES;
            _bottomLabel.backgroundColor=[UIColor lightGrayColor];
            _bottomLabel.userInteractionEnabled=NO;
            _bottomLabel.text=@"请选购";
        }else
        {
            _bottomLabel.backgroundColor=[UIColor clearColor];
            _bottomLabel.userInteractionEnabled=YES;
            _bottomLabel.text=@"去结算";
        }
        _totalSingular.text=[NSString stringWithFormat:@"%ld",totalSingularInt];
        _totalPrice.text=[NSString stringWithFormat:@"¥%ld",total];
    
    }

     

    第四:关于页面的圆角样式效果

    BALabel *bottomLabel =[[BALabel alloc]initWithFrame:(CGRect){kWindowWidth-55-10,50/2-24/2,55,24}];
        bottomLabel.text=@"请选购";
        bottomLabel.textColor=[UIColor whiteColor];
        bottomLabel.textAlignment=NSTextAlignmentCenter;
        bottomLabel.font=Font(13);
        bottomLabel.backgroundColor=[UIColor lightGrayColor];
        bottomLabel.layer.masksToBounds=YES;
        bottomLabel.layer.cornerRadius=6;
        bottomLabel.layer.borderWidth = 1;
        bottomLabel.userInteractionEnabled=NO;
        [bottomLabel addTarget:self action:@selector(bottomLabelClick) forControlEvents:BALabelControlEventTap];
        bottomLabel.layer.borderColor = [[UIColor whiteColor] CGColor];
        [bottomView addSubview:bottomLabel];
  • 相关阅读:
    Java用户自定义函数
    JavaScript常用函数
    Javascript 流程控制
    Javascript基础
    CSS的继承和使用方式
    Python列表
    Python变量和简单数据类型
    CSS选择符
    CSS的基本语法
    Java环境变量搭建
  • 原文地址:https://www.cnblogs.com/wujy/p/4628847.html
Copyright © 2011-2022 走看看