OC 创建TableView基类并结合MJRefresh实现上拉刷新,下拉加载

本文介绍了一个自定义的BaseTableView基类,该类继承自UITableView,并实现了下拉刷新和上拉加载的功能。通过设置代理方法,可以轻松地在各种场景中使用刷新和加载更多数据。同时,该类还提供了数据为空时的提示显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.创建继承自UITableView的基类BaseTableView:

#import <UIKit/UIKit.h>
@class BaseTableView;
@protocol BaseTableViewDelegate <NSObject>
@optional
//下拉刷新
- (void)refresh:(BaseTableView *)tableView;
//上拉加载
- (void)reload:(BaseTableView *)tableView;

@end
@interface BaseTableView : UITableView
//能否刷新
@property (nonatomic, assign)BOOL enableRefresh;
//能否加载
@property (nonatomic, assign)BOOL enableReloadData;
//是否有数据
@property (nonatomic, assign)BOOL isNoData;
@property (nonatomic, weak)id<BaseTableViewDelegate>EventDelegate;
@property (nonatomic, strong)UILabel *noDataLabel;
@end
#import "BaseTableView.h"

@implementation BaseTableView
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/
- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style{
    if ([super initWithFrame:frame style:style]) {
#pragma mark - 刷新
        self.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
            if ([self.EventDelegate respondsToSelector:@selector(refresh:)]) {
                [self.EventDelegate refresh:self];
            }
        }];
#pragma mark - 加载
        self.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
            if ([self.EventDelegate respondsToSelector:@selector(reload:)]) {
                [self.EventDelegate reload:self];
            }
        }];
#pragma mark - 有无数据提示
        [self addSubview:self.noDataLabel];
#pragma mark - tableview 设置
        self.separatorStyle = UITableViewCellSeparatorStyleNone;
        self.backgroundColor = [UIColor groupTableViewBackgroundColor];
    }
    return self;
}
#pragma mark - 设置能否刷新
- (void)setEnableRefresh:(BOOL)enableRefresh {
    _enableRefresh = enableRefresh;
    if (_enableRefresh) {
        self.mj_header.hidden = NO;
    }else {
        self.mj_header.hidden = YES;
    }
}
#pragma mark - 设置能否加载
- (void)setEnableReloadData:(BOOL)enableReloadData {
    _enableReloadData = enableReloadData;
    if (_enableReloadData) {
        self.mj_footer.hidden = NO;
    }else {
        self.mj_footer.hidden = YES;
    }
}
#pragma mark - 设置是否有数据
- (void)setIsNoData:(BOOL)isNoData {
    _isNoData = isNoData;
    if (_isNoData) {
        self.noDataLabel.hidden = NO;
    }else {
        self.noDataLabel.hidden = YES;
    }
}
#pragma mark - 懒加载没有数据的提示
- (UILabel *)noDataLabel {
    if (!_noDataLabel) {
        _noDataLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, (self.height - 40) / 2 , self.width, 40)];
        _noDataLabel.font = [UIFont systemFontOfSize:17];
        _noDataLabel.textAlignment = NSTextAlignmentCenter;
        _noDataLabel.text = @"暂无数据";
        _noDataLabel.textColor = [UIColor grayColor];
    }
    return _noDataLabel;
}
@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值