//
// 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 <MJRefresh/MJRefresh.h>
@interface ViewController () <UITableViewDataSource, CZFooterViewDelegate>
//存储商品的数据
@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
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 5月以来,哪怕对市场风向再不敏感的人,也感觉到阵阵凉意。二级市场连续下挫,一级市场融资环境恶化,不论企业融资数量还...