自定义类MLTgFooterView 和 MLTgFooterViewDelegate
#import <UIKit/UIKit.h>
/**
1.协议名称: 控件类名 + Delegate
2.代理方法普遍都是@optional
3.代理方法一般以空间名开头,不包含前缀
*/
@protocol MLTgFooterViewDelegate <NSObject>
@optional//不强求实现
-(void)tgFooterViewDidClickedLoadBtn:(MLTgFooterView *)tgFooterView;
@end
@interface MLTgFooterView : UIView
@property(nonatomic , weak)id<MLTgFooterViewDelegate> delegate;
//用来快速创建一个footView对象.
+(instancetype)fgFooterView;
-(instancetype)initTgFooterView;
@end
2.自定义类MLTgFooterView的实现
#import "MLTgFooterView.h"
@interface MLTgFooterView ()
@property (weak, nonatomic) IBOutlet UIButton *loadBtn;
@property (weak, nonatomic) IBOutlet UIView *loadingView;
-(IBAction)loadBtnClick;
@end
@implementation MLTgFooterView
+(instancetype)fgFooterView{
return [[self alloc]initTgFooterView];
}
-(instancetype)initTgFooterView{
//初始化一个nib对象(包含xib中的所有信息)-----另一种加载Xib文件的方法
//UINib *nib = [UINib nibWithNibName:@"MLTableFooterView" bundle:nil];
//返回的是xib中所有的文件的数组,因为此xib中只有一个,故用fistObject获取改自定义的View.
//UIView *footView = [[nib instantiateWithOwner:nil options:nil] firstObject];
return [[[NSBundle mainBundle] loadNibNamed:@"MLTgFooterView" owner:nil options:nil] firstObject];
}
-(IBAction)loadBtnClick{
//隐藏加载按钮
self.loadBtn.hidden = YES;
//显示正在加载的view
self.loadingView.hidden = NO;
//显示更多数据
//使用C语言实现延迟
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if ([self.delegate respondsToSelector:@selector(tgFooterViewDidClickedLoadBtn:)]) {
//加载数据
[self.delegate tgFooterViewDidClickedLoadBtn:self];
//显示加载按钮
self.loadBtn.hidden = NO;
//隐藏"正在加载"
self.loadingView.hidden = YES;
}
});
}
3.控制器实现自定义tableFooterView的部分代码,以及使用实现MLTgFooterViewDelegate协议来完成数据的模拟加载.(首先控制器要继承MLTgFooterViewDelegate协议)
//使用自定义的tableFooterView
MLTgFooterView *footer = [MLTgFooterView fgFooterView];
footer.delegate = self;
self.tableView.tableFooterView = footer;
-(void)tgFooterViewDidClickedLoadBtn:(MLTgFooterView *)tgFooterView{
//添加更多的模型数据(虚拟数据)
MLTg *tg = [[MLTg alloc]init]; //其中MLTg是个数据模型,_tgs是控制器的成员,用来保存所有的数据模型.
tg.icon = @"ad_00";
tg.title = @"新增加的团购数据..";
tg.price = @"100";
tg.buyCount = @"0";
//将数据天道_tgs中
[_tgs addObject:tg];
//刷新表格(告诉tableView重新加载模型数据,调用tableView的reloadData)
[self.tableView reloadData];
}