团购2-MJRefresh

//
//  ViewController.m
//  自定义cell_团购
//
//  Created by Song on 2020/6/30.
//  Copyright © 2020 Song. All rights reserved.
//

#import "ViewController.h"
#import "CZGoods.h"
#import "CZGoodsCell.h"
#import "CZFooterView.h"
#import "CZHeaderView.h"
#import 

@interface ViewController () 
//存储商品的数据
@property (nonatomic, strong) NSMutableArray *goods;
@property (weak, nonatomic) IBOutlet UITableView *tableView;

@end

@implementation ViewController

#pragma mark - 懒加载
- (NSMutableArray *) goods {
    if(_goods == nil) {
        NSString *path = [[NSBundle mainBundle] pathForResource:@"tgs.plist" ofType:nil];
        NSArray *arrayDict = [NSArray arrayWithContentsOfFile:path];
        NSMutableArray *arrayModels = [NSMutableArray array];
        for (NSDictionary *dict in arrayDict) {
            CZGoods* model = [CZGoods goodsWithDict:dict];
            [arrayModels addObject:model];
        }
        _goods = arrayModels;
    }
    return _goods;
}

#pragma mark - 数据源方法

//下面这三个是必须要实现的
// 第一步,告诉视图,有多少个section需要加载到table里,这里是单个列表,所以返回就是1,之前的那种车的品牌的多个列表就是多个页表
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}
// 第二步,告诉controller每个section需要加载多少个单元或者行。
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.goods.count;
}
// 第三步,返回UITableViewCell的实例,用于构成tablegview,这个函数是一定要实现的。
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 1.获取模型数据
    CZGoods *model = self.goods[indexPath.row];
    // 2.创建单元格
//    static NSString *ID = @"goods_cell";
//    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
//    if(cell == nil) {
//        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
//    }
    //xib创建单元格,注意创建xib的时候要新建一个类继承自UIViewCell才可以!
    // 把下面的代码封装了,一是省事,而是以后万一不用xib了,方便修改。减少依赖
    
    CZGoodsCell *cell = [CZGoodsCell goodsCellWithTableView:tableView];
//    static NSString *ID = @"goods_cell";//可重用id需要在xib右侧属性设置一下
//    CZGoodsCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
//    if(cell == nil) {
//        cell = [[[NSBundle mainBundle] loadNibNamed:@"CZGoodsCell" owner:nil options:nil] firstObject];
//        
//    } //firstObject代表第一个单元格
    
    
    // 3.把模型数据设置给单元格
    //在控制器中直接给cell的每个子控件赋值数据造成的问题:
    // 1.控制器强依赖于cell,造成了紧耦合
    // 2. cell的封装不够完整,凡是用到这个cell的地方,每次都要编写cell的子控件依次赋值的语句
//    cell.imageView.image = [UIImage imageNamed:model.icon];
//    cell.textLabel.text = model.title;
//    cell.detailTextLabel.text = [NSString stringWithFormat:@"$ %@                 %@人已购买", model.price, model.buyCount];
    cell.goods = model;
    
    // 4.返回单元格
    return cell;
}

#pragma mark - 隐藏状态栏
- (BOOL) prefersStatusBarHidden {
    return YES;
}
#pragma mark - CZFooterView的代理方法

- (void) footerViewUpdateDate:(CZFooterView *)footerView {
    // 3. 增加一条数据
    // 3.1 创建一个模型对象
    CZGoods *model = [[CZGoods alloc] init];
    model.title = @"驴肉火烧";
    model.price = @"6.0";
    model.buyCount = @"1000";
    model.icon = @"coronavirus_01";
    // 3.2 把模型对象加到控制器的goods集合当中
    [self.goods addObject:model];
    // 4. 刷新UITableView
    [self.tableView reloadData];
    // 5. 点击完之后把UITableView中的最后一行的数据滚动到最上面
    NSIndexPath *idxPath = [NSIndexPath indexPathForRow:self.goods.count - 1 inSection:0];
    [self.tableView scrollToRowAtIndexPath:idxPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // Do any additional setup after loading the view.
    self.tableView.rowHeight = 100;
    
    //设置UITableView的footerView
    
    
//    UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];
//    btn.backgroundColor = [UIColor redColor];
//    //tableView 的 footview 只能修改x 和 y 不能修改 长和宽
//    btn.frame = CGRectMake();
//    self.tableView.tableFooterView = btn;
    
    
    //通过xib设置UITableView的footerView
    //CZFooterView *footerView = [[[NSBundle mainBundle] loadNibNamed:@"CZFooterView" owner:nil options:nil] lastObject];
    //把上面的给封装了
    CZFooterView *footerView = [CZFooterView footerView];
    //设置footerView的代理
    footerView.delegate = self;
    self.tableView.tableFooterView = footerView;
    
    
    //创建HeaderView
//    CZHeaderView *headerView = [[[NSBundle mainBundle] loadNibNamed:@"CZHeaderView" owner:nil options:nil] firstObject];
    CZHeaderView *headerView = [CZHeaderView headerView];
    self.tableView.tableHeaderView = headerView;
    
    // 下拉刷新,这个__weak到底可不可以取消呢?解除循环引用
    __weak typeof(self)  weakSelf = self;
    self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        // 模拟延迟加载数据,因此2秒后才调用(真实开发中,可以移除这段gcd代码)
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            // 结束刷新
            [weakSelf.tableView.mj_header endRefreshing];
        });
    }];
    
    // 上拉刷新
    self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
        // 模拟延迟加载数据,因此2秒后才调用(真实开发中,可以移除这段gcd代码)
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            // 结束刷新
            [weakSelf.tableView.mj_footer endRefreshing];
        });
    }];
}


@end

你可能感兴趣的:(团购2-MJRefresh)