自定义类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的实现atom
#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协议)spa
//使用自定义的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]; }