IOS自定义TableFooterView

  1. 自定义类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];
}



   

你可能感兴趣的:(ios,自定义,tableFooterView)