iOS UITableView資料為空時提示頁面
前言
當tableview資料為空時,一般新增一個圖片和一些文案,提示沒有資料。
UITableView的category或繼承的倉庫地址
UIScrollView的category方案
詳細文件
方法一 繼承UITableView
1、繼承UITableView,再新類中整合圖片和文字
#import <UIKit/UIKit.h>
#import "Const.h"
@interface WFEmptyTableView : UITableView
@property (nonatomic, assign) BOOL showEmptyTipView; // 是否顯示背景提示文字
@property (nonatomic, assign) NSInteger vOffset;
@property (nonatomic, copy) NSString *tipString; // 提示文字
@property (nonatomic, copy) NSString *tipImageName; // 提示圖片
@end
#import "WFEmptyTableView.h"
@implementation WFEmptyTableView {
UIView *_customBackView;
UIImageView *_tipImageView;
UILabel *_label;
CGRect _imageFrame;
CGRect _labelFrame;
double _scale;
}
- (WFEmptyTableView *)initWithFrame:(CGRect)frame style:(UITableViewStyle)style {
self = [super initWithFrame:frame style:style];
if (self) {
[self setupViews];
}
return self;
}
- (void)setupViews {
_customBackView = [[UIView alloc] initWithFrame:self.frame];
_customBackView.backgroundColor = [UIColor yellowColor];
_tipImageView = [[UIImageView alloc] initWithFrame:CGRectMake((kScreenWidth-200/2)/2, self.frame.size.height/3, 200/2, 200/2)];
[_customBackView addSubview:_tipImageView];
_imageFrame = _tipImageView.frame;
_label = [[UILabel alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(_tipImageView.frame), kScreenWidth, 100)];
_label.backgroundColor = [UIColor clearColor];
_label.textAlignment = NSTextAlignmentCenter;
_label.textColor = [UIColor lightGrayColor];
_label.font = [UIFont systemFontOfSize:16];
_label.lineBreakMode = NSLineBreakByCharWrapping;
_label.numberOfLines = 0;
[_customBackView addSubview:_label];
_labelFrame = _label.frame;
}
- (void)setShowEmptyTipView:(BOOL)showEmptyTipView {
_showEmptyTipView = showEmptyTipView;
if (showEmptyTipView) {
[self addSubview:_customBackView];
} else {
[_customBackView removeFromSuperview];
}
}
- (void)setTipString:(NSString *)tipString {
_tipString = tipString;
NSMutableAttributedString * attributedString1 = [[NSMutableAttributedString alloc] initWithString:tipString];
NSMutableParagraphStyle * paragraphStyle1 = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle1 setLineSpacing:15];
[paragraphStyle1 setAlignment:NSTextAlignmentCenter];
[attributedString1 addAttribute:NSParagraphStyleAttributeName value:paragraphStyle1 range:NSMakeRange(0, [tipString length])];
[_label setAttributedText:attributedString1];
[self resetFrame];
}
- (void)setTipImageName:(NSString *)tipImageName {
_scale = 1;
UIImage *image = [UIImage imageNamed:tipImageName];
_scale = image.size.height*1.0 / image.size.width;
_tipImageView.image = image;
if (isnan(_scale)) {
_scale = 1;
}
[self resetFrame];
}
- (void)setVOffset:(NSInteger)vOffset {
_label.frame = CGRectMake(CGRectGetMinX(_label.frame), CGRectGetMinY(_label.frame)+vOffset, CGRectGetWidth(_label.frame), CGRectGetHeight(_label.frame));
_tipImageView.frame = CGRectMake(CGRectGetMinX(_tipImageView.frame), CGRectGetMinY(_tipImageView.frame)+vOffset, CGRectGetWidth(_tipImageView.frame), CGRectGetHeight(_tipImageView.frame));
}
- (void)resetFrame {
_tipImageView.frame = CGRectMake(0, CGRectGetMinY(_tipImageView.frame), 150, 150 * _scale);
_tipImageView.center = CGPointMake(kScreenWidth / 2.0, _tipImageView.center.y);
_label.frame = CGRectMake(CGRectGetMinX(_label.frame), CGRectGetMaxY(_tipImageView.frame), CGRectGetWidth(_label.frame), CGRectGetHeight(_label.frame));
}
@end
方法二 是用Category
#import <UIKit/UIKit.h>
@interface UITableView (WFEmpty)
@property (nonatomic, strong, readonly) UIView *emptyView;
-(void)addEmptyViewWithImageName:(NSString*)imageName title:(NSString*)title;
@end
#import "UITableView+WFEmpty.h"
#import <objc/runtime.h>
static char UITableViewEmptyView;
@implementation UITableView (WFEmpty)
@dynamic emptyView;
- (UIView *)emptyView
{
return objc_getAssociatedObject(self, &UITableViewEmptyView);
}
- (void)setEmptyView:(UIView *)emptyView
{
[self willChangeValueForKey:@"HJEmptyView"];
objc_setAssociatedObject(self, &UITableViewEmptyView,
emptyView,
OBJC_ASSOCIATION_ASSIGN);
[self didChangeValueForKey:@"HJEmptyView"];
}
-(void)addEmptyViewWithImageName:(NSString*)imageName title:(NSString*)title
{
if (!self.emptyView)
{
CGRect frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
UIImage* image = [UIImage imageNamed:imageName];
NSString* text = title;
UIView* noMessageView = [[UIView alloc] initWithFrame:frame];
noMessageView.backgroundColor = [UIColor clearColor];
UIImageView *carImageView = [[UIImageView alloc] initWithFrame:CGRectMake((frame.size.width-image.size.width)/2, 60, image.size.width, image.size.height)];
[carImageView setImage:image];
[noMessageView addSubview:carImageView];
UILabel *noInfoLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 160, frame.size.width, 20)];
noInfoLabel.textAlignment = NSTextAlignmentCenter;
noInfoLabel.textColor = [UIColor lightGrayColor];
noInfoLabel.text = text;
noInfoLabel.backgroundColor = [UIColor clearColor];
noInfoLabel.font = [UIFont systemFontOfSize:20];
[noMessageView addSubview:noInfoLabel];
[self addSubview:noMessageView];
self.emptyView = noMessageView;
}
}
@end
相關文章
- 對空資料頁面等公共頁面實現的一些思考
- 我對空資料頁面等公共頁面實現的一些想法
- iOS UITableView 修改屬性iOSUIView
- vue中當資料為空時的處理Vue
- iOS Swift UITableView的scrollToRow的”坑”iOSSwiftUIView
- iOS 效能篇一一UITableView效能優化iOSUIView優化
- iOS開發-UITableView的重用機制iOSUIView
- ThinkPHP框架中自定義錯誤頁面和提示頁面PHP框架
- 為什麼datawork 資料開發頁面展示不出來?
- 面試:頁面載入海量資料面試
- iOS-UITableView行高自動計算iOSUIView
- 【IOS初學者】UITableView與自定義UITableViewCelliOSUIView
- vue單頁應用如何在頁面重新整理時保留狀態資料Vue
- 【MybatisPlus】資料庫的datetime型別欄位為空的時候,報錯空指標?MyBatis資料庫型別指標
- 頁面之間傳遞資料
- 頁面資料賦值轉換賦值
- php 跳轉頁面之前彈窗提示PHP
- 計算時間差,頁面倒數計時,安卓與ios相容問題安卓iOS
- 【python資料分析】判斷資料框是否為空Python
- img標籤src屬性不存在或值為空時頁面出現邊框解決方法
- 《iOS面試題 - 老生常談》之提示答案iOS面試題
- js進入詳情頁再返回到上一個列表頁面時怎麼能讓原來頁面資料不變JS
- iOS使用UITableView實現的富文字編輯器iOSUIView
- 詳細整理iOS中UITableView的效能最佳化iOSUIView
- Tp6 資料庫管理工具,生成前後臺CRUD頁面,直接作為後臺頁面使用資料庫
- iOS 頁面起始座標的變化iOS
- Vue 頁面狀態保持頁面間資料傳輸的一種方法Vue
- 023.Vue3入門,父頁面給子頁面傳遞資料Vue
- 限時看!阿里、華為資料結構面試必考題!阿里資料結構面試
- iOS 封裝頁數控制,點選NavigationTabBar切換頁面iOS封裝NavigationtabBar
- 拋棄UITableView,讓所有列表頁不再難構建UIView
- 判斷資料庫中表內資料為空的辦法資料庫
- iOS UIScrollVIew UITableView UIwebView WKWebView 截全圖,生成全圖方法iOSUIWebView
- WebForm登入頁面(連線資料庫)WebORM資料庫
- iOS開發-使用Safari除錯iOS APP H5頁面iOS除錯APPH5
- iOS效能優化之頁面載入速率iOS優化
- 小程式頁面間通訊——EventChannel(資料量多時)
- Oracle臨時表空間檢視、新增臨時表空間資料檔案、修改預設臨時表空間 方法!Oracle