// TGtgfootview.h=======================
// TG团购
//
// Created by Toge on 6/5/15.
// Copyright (c) 2015 wxhl. All rights reserved.
//
#import <UIKit/UIKit.h>
@class TGtgfootview;
//协议名是类名加Delegate,方便其他人使用
@protocol TGtgfootviewDelegate <NSObject>
//可选的方法类型
@optional
//方法名以类名去除前缀开始,最好可以描述清楚要做的事情,最后还要把自己作为参数使调用着知道是谁在调用,避免当方法名重名时可以区分
- (void)tgfootviewDidClicloadButton:(TGtgfootview *)tgfootview;
@end
@interface TGtgfootview : UIView
//定义代理属性
@property (nonatomic,weak) id <TGtgfootviewDelegate> delegate;
+ (instancetype)footView;
@end
// TGtgfootview.m====================================
// TG团购
//
// Created by Toge on 6/5/15.
// Copyright (c) 2015 wxhl. All rights reserved.
//
#import "TGtgfootview.h"
@interface TGtgfootview()
@property (weak, nonatomic) IBOutlet UIView *loadingView;
@property (weak, nonatomic) IBOutlet UIButton *loadBtb;
- (IBAction)loadButton:(UIButton *)sender;
@end
@implementation TGtgfootview
+ (instancetype)footView
{
return [[[NSBundle mainBundle] loadNibNamed:@"TGtgfootView" owner:nil options:nil] lastObject];
}
//点击加载按钮的实现
- (IBAction)loadButton:(UIButton *)sender {
// 隐藏加载按钮并且现实正在加载
self.loadBtb.hidden = YES;
self.loadingView.hidden = NO;
// 加载更多数据,由于数据在控制器类中所以加载数据最好是在控制器中实现,所以需要设置代理
// 此方法延迟执行某些代码
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//调用代理方法
[self.delegate tgfootviewDidClicloadButton:self];
// 显示加载更多按钮
self.loadBtb.hidden = NO;
// 隐藏玩命加载试图
self.loadingView.hidden = YES;
});
}
@end
// ViewController.m=============================
// TG团购
//
// Created by Toge on 6/5/15.
// Copyright (c) 2015 wxhl. All rights reserved.
//
#import "ViewController.h"
#import "TGtg.h"
#import "TGtgCell.h"
#import "TGtgfootview.h"
@interface ViewController ()<UITableViewDataSource,TGtgfootviewDelegate>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@end
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//定义所有行的宽
self.tableView.rowHeight = 80;
/**
*在表示图的footerview上添加按钮
*/
//第一种方式
// UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];
// btn.frame = CGRectMake(0, 0, 0, 44);
// btn.backgroundColor = [UIColor orangeColor];
// [btn setTitle:@"加载更多数据" forState:UIControlStateNormal];
//第二种方式
// NSString *path = [[NSBundle mainBundle] pathForResource:@"TGtgfootView.xib" ofType:nil];
// UIView *footView = [[NSArray arrayWithContentsOfFile:path] lastObject];
//读取nib文件
// UINib *nib = [UINib nibWithNibName:@"TGtgfootView" bundle:nil];
// UIView *footView = [[nib instantiateWithOwner:nil options:nil] lastObject];
//第二种方式的延伸,nib文件的加载封装到view中,view中提供返回view的方法如下
// self.tableView.tableFooterView = [TGtgfootview footView];
// 第三种方式使用tag值,此种方式太垃圾
//第四种方式,封装view,此处使用到代理,要遵守代理协议TGtgfootviewDelegate
TGtgfootview *footView = [TGtgfootview footView];
footView.delegate = self;
self.tableView.tableFooterView = footView;
}
//TGfootviewDelegate协议的实现,加载数据
- (void)tgfootviewDidClicloadButton:(TGtgfootview *)tgfootview
{
// 此处先使用手动添加的数据
TGtg *tg = [[TGtg alloc] init];
tg.icon =@"ad_01";
tg.title = @"新添加的数据";
tg.price = @"200";
tg.buyCount = @"3333";
[self.tgs addObject:tg];
// 重新加载表示图上的数据
[self.tableView reloadData];
}