代理的简单使用

作者: Z了个L | 来源:发表于2016-07-27 14:44 被阅读46次
    • 模型数据
    
    // XMGWine.h
    #import <Foundation/Foundation.h>
    
    @interface XMGWine : NSObject
    @property (copy, nonatomic) NSString *money;
    @property (copy, nonatomic) NSString *name;
    @property (copy, nonatomic) NSString *image;
    
    /** 购买的数量*/
    @property (nonatomic ,assign) int count;
    @end
    
    // XMGWine.m
    #import "XMGWine.h"
    
    @implementation XMGWine
    
    @end
    
    
    
    // XMGWineCell.h
    #import <UIKit/UIKit.h>
    
    @class XMGWine,XMGWineCell;
    
    @protocol XMGWineCellDelegate <NSObject>
    
    @optional
    
    /** 点击了加号按钮 */
    - (void)wineCellDidClickPlusButton:(XMGWineCell *)wineCell;
    /** 点击了减号按钮 */
    - (void)wineCellDidClickMinusButton:(XMGWineCell *)wineCell;
    
    @end
    
    @interface XMGWineCell : UITableViewCell
    
    /** 酒模型*/
    @property (nonatomic ,strong) XMGWine *wine;
    
    @property (nonatomic ,weak)id <XMGWineCellDelegate>delegate;
    @end
    
    
    // XMGWineCell.m
    
    
    #import "XMGWineCell.h"
    #import "XMGWine.h"
    #import "XMGCircleButton.h"
    
    @interface XMGWineCell ()
    
    @property (weak, nonatomic) IBOutlet UIImageView *imageImageView;
    @property (weak, nonatomic) IBOutlet UILabel *nameLabel;
    @property (weak, nonatomic) IBOutlet UILabel *moneyLabel;
    @property (weak, nonatomic) IBOutlet UILabel *countLabel;
    @property (weak, nonatomic) IBOutlet XMGCircleButton *minusButton;
    
    @end
    @implementation XMGWineCell
    
    - (void)setWine:(XMGWine *)wine
    {
        _wine = wine;
        self.imageImageView.image = [UIImage imageNamed:wine.image];
    
        self.nameLabel.text = wine.name;
    
        self.moneyLabel.text = wine.money;
    
        // 根据count决定countLabel显示的文字
        self.countLabel.text = [NSString stringWithFormat:@"%d",wine.count];
        // 根据count决定减号是否能点击
        self.minusButton.enabled = (wine.count > 0);
    }
    
    /**
     * 加号点击
     */
    - (IBAction)plusClick {
        // 修改模型
        self.wine.count ++ ;
        // 修改界面
        self.countLabel.text = [NSString stringWithFormat:@"%d",self.wine.count];
        // 减号按钮一定能点击
        self.minusButton.enabled = YES;
    
        // 通知代理(调用代理的方法)
        if ([self.delegate respondsToSelector:@selector(wineCellDidClickPlusButton:)]) {
             [self.delegate wineCellDidClickPlusButton:self];
        }
    
    }
    
    /**
     *  减号点击
     */
    - (IBAction)minusClick {
        // 修改模型
        self.wine.count -- ;
        // 修改界面
        self.countLabel.text = [NSString stringWithFormat:@"%d",self.wine.count];
    
        // 减号按钮不能点击
        if (self.wine.count == 0) {
            self.minusButton.enabled = NO;
        }
    
        // 通知代理(调用代理的方法)
        if ([self.delegate respondsToSelector:@selector(wineCellDidClickMinusButton:)]) {
    
            [self.delegate wineCellDidClickMinusButton:self];
        }
    
    }
    @end
    
    
    
    
    // ViewController.h
    #import <UIKit/UIKit.h>
    
    @interface ViewController : UIViewController
    
    
    @end
    
    // ViewController.m
    
    
    #import "ViewController.h"
    #import "XMGWine.h"
    #import "MJExtension.h"
    #import "XMGWineCell.h"
    
    @interface ViewController () <UITableViewDataSource ,XMGWineCellDelegate>
    
    
    @property (weak, nonatomic) IBOutlet UITableView *tableView;
    
    /** 所有的酒数据*/
    @property (nonatomic ,strong) NSArray *wineArray;
    
    /** 总价*/
    @property (weak, nonatomic) IBOutlet UILabel *totalPriceLabel;
    @property (weak, nonatomic) IBOutlet UIButton *buyButton;
    
    @end
    
    @implementation ViewController
    
    
    #pragma mark - 懒加载
    - (NSArray *)wineArray
    {
        if (!_wineArray) {
            _wineArray = [XMGWine mj_objectArrayWithFilename:@"wine.plist"];
        }
        return _wineArray;
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
    }
    
    #pragma mark- XMGWineCellDelegate
    // 实现代理方法
    - (void)wineCellDidClickPlusButton:(XMGWineCell *)wineCell
    {
        // 计算总价
        int totalPrice = self.totalPriceLabel.text.intValue + wineCell.wine.money.intValue;
        // 设置总价
        self.totalPriceLabel.text = [NSString stringWithFormat:@"%d",totalPrice];
        // 购买按钮一点能点击
        self.buyButton.enabled = YES;
    }
    
    - (void)wineCellDidClickMinusButton:(XMGWineCell *)wineCell
    {
        // 计算总价
        int totalPrice = self.totalPriceLabel.text.intValue - wineCell.wine.money.intValue;
        // 设置总价
        self.totalPriceLabel.text = [NSString stringWithFormat:@"%d",totalPrice];
        // 控制减号按钮是否能点击
        self.buyButton.enabled = totalPrice > 0;
    }
    
    #pragma mark - 按钮的点击事件
    - (IBAction)clear {
        // 修改模型
        for (XMGWine *wine in self.wineArray) {
            wine.count = 0;
        }
        
        // 刷新表格
        [self.tableView reloadData];
        
        // 清空总价
        self.totalPriceLabel.text = @"0";
        
        // 购买按钮一定不能点击
        self.buyButton.enabled = NO;
    }
    
    - (IBAction)buy {
        // 打印用户购买的商品的
        for (XMGWine *wine in self.wineArray) {
            if (wine.count > 0) {
                NSLog(@"购买了%d件%@",wine.count,wine.name);
            }
        }
    }
    
    #pragma mark - UITableViewDataSource
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return self.wineArray.count;
    }
    
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // 访问缓存池
        static NSString *ID = @"wine";
        XMGWineCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
        cell.delegate = self;
        // 设置数据
        cell.wine = self.wineArray[indexPath.row];
        return cell;
    }
    @end
    
    
    

    相关文章

      网友评论

        本文标题:代理的简单使用

        本文链接:https://www.haomeiwen.com/subject/mxmojttx.html