在我們經(jīng)常的開(kāi)發(fā)中,我們空列表樣式往往使用tableviewcell來(lái)實(shí)現(xiàn)的,判斷列表數(shù)據(jù)為空時(shí),然后展示空列表的tableviewcell.
那這樣 就有一個(gè)缺點(diǎn): 就是當(dāng)頁(yè)面剛展示的時(shí)候,請(qǐng)求還在加載,默認(rèn)列表數(shù)據(jù)就是空,那此時(shí)就展示空列表樣式是不對(duì)的.
那我的處理方法就是在tableview上添加空樣式view,此view默認(rèn)是隱藏的,請(qǐng)求完成之后再根據(jù)請(qǐng)求數(shù)據(jù)來(lái)控制view的隱藏和展示,代碼如下
//.h文件
#import <UIKit/UIKit.h>
@interface TableListEmptyView :UIView
@property(nonatomic, strong) UIImageView *imgView;
@property(nonatomic, strong) UILabel *label;
@property(nonatomic, strong) UIImage *emptyImg;
@end
@interface BaseTableView : UITableView
@property(nonatomic, strong) TableListEmptyView *emptyListView;
@end
-------------------------------
//.m文件
#import "BaseTableView.h"
@implementation TableListEmptyView
-(instancetype)init{
self=[super init];
if(self)
{
[self initUI];
}
return self;
}
-(void)initUI{
self.imgView=[[UIImageView alloc]init];
[self addSubview:self.imgView];
[self.imgView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self);
make.size.mas_equalTo(CGSizeMake(100, 100));
make.top.equalTo(self).offset(100);
}];
self.label=[UILabel new];
self.label.textColor=[HXStyleManager sharedConfig].labelColorL3;
self.label.font=[UIFont systemFontOfSize:15];
[self addSubview:self.label];
[self.label mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self);
make.top.equalTo(self.imgView.mas_bottom).offset(12);
}];
}
-(void)setEmptyImg:(UIImage *)emptyImg
{
_emptyImg=emptyImg;
self.imgView.image=emptyImg;
[self.imgView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self);
make.top.equalTo(self).offset(100);
}];
}
@end
@implementation BaseTableView
-(TableListEmptyView *)emptyListView
{
if(!_emptyListView)
{
_emptyListView=[TableListEmptyView new];
[self addSubview:_emptyListView];
[_emptyListView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.left.right.equalTo(self);
make.width.mas_equalTo(self);
}];
_emptyListView.hidden=YES;
}
return _emptyListView;
}
@end
用懶加載的方法,空視圖view不調(diào)用是不會(huì)實(shí)例化的,當(dāng)然我的空視圖比較簡(jiǎn)單,就是一張圖片和一個(gè)文字,圖片可以根據(jù)每個(gè)列表來(lái)動(dòng)態(tài)設(shè)置.此列表視圖也不會(huì)影響手勢(shì)的滾動(dòng),就是空視圖的展示的時(shí)候也可以下拉觸發(fā)mjrefresh重新請(qǐng)求. 然后在列表請(qǐng)求的地方這么使用
//tableview初始化時(shí)
self.tableView.emptyListView.emptyImg=[UIImage imageNamed:@"icon_cmt_emptyList"];
self.tableView.emptyListView.label.text=@"暫無(wú)數(shù)據(jù)";
//請(qǐng)求成功時(shí)
if(self.dataArr.count>0)
{
self.tableView.emptyListView.hidden=YES;
}else{
self.tableView.emptyListView.hidden=NO;
}
這樣就保證在頁(yè)面 剛進(jìn)入請(qǐng)求的時(shí)候不會(huì)展示空列表數(shù)據(jù)給用戶一個(gè)不好的體驗(yàn),請(qǐng)求完成之后才展示正確的數(shù)據(jù). 當(dāng)然你有更好的方案可以在下面評(píng)論區(qū)告訴我