首页 > 代码库 > IOS自定义TableFooterView

IOS自定义TableFooterView

////---------------自定义TableFootViewDelegate类,用来管理对应的Xib文件----------------

#import <UIKit/UIKit.h>

//该协议用来规范了加载更多数据的方法(需要用到控制器中的加载更多的方法)
@protocol MLTableFooterViewDelegate <NSObject>
@optional
-(void)loadingMoreData;
@end

@interface MLTableFooterView : UIView

@property(nonatomic , weak)id<MLTableFooterViewDelegate> delegate;
//用来快速创建一个footView对象.
+(instancetype)footerView;
-(instancetype)initFooterView;

@end

#import "MLTableFooterView.h"

@interface MLTableFooterView ()
@property (weak, nonatomic) IBOutlet UIButton *loadBtn;
@property (weak, nonatomic) IBOutlet UIView *loadingView;

-(IBAction)loadBtnClick;

@end

@implementation MLTableFooterView

+(instancetype)footerView{
    return [[self alloc]initFooterView];
}
-(instancetype)initFooterView{
    
    //初始化一个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:@"MLTableFooterView" 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(loadingMoreData)]) {
            //加载数据
            [self.delegate loadingMoreData];
            //显示加载按钮
            self.loadBtn.hidden = NO;
            //隐藏"正在加载"
            self.loadingView.hidden = YES;
            
        }
    });
}
@end

////------控制器中部分代码------------(需要实现协议MLTableFooterViewDelegate)
    //使用自定义的tableFooterView
    MLTableFooterView *footer = [MLTableFooterView footerView];
    footer.delegate = self;
    //将tableView的代理对象设置为当前类对象.
    self.tableView.tableFooterView = footer;
    
//实现协议的loadingMoreData方法,加载更多数据
-(void)loadingMoreData{
    //添加更多的模型数据(虚拟数据)
    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