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
相關文章
- Jquery 離開頁面時提示儲存jQuery
- 對空資料頁面等公共頁面實現的一些思考
- 我對空資料頁面等公共頁面實現的一些想法
- ios Coredata 關聯 UITableView 資料自動更新iOSUIView
- 頁面資料匯出為word或者excelExcel
- jquery實現頁面離開時檢測當前頁面是否被修改,修改則提示jQuery
- iOS空資料處理iOS
- vue中當資料為空時的處理Vue
- iOS頁面翻轉iOS
- ThinkPHP框架中自定義錯誤頁面和提示頁面PHP框架
- 為什麼datawork 資料開發頁面展示不出來?
- 回退上一個頁面時如何保證之前的資料還在,即回退時不重新整理頁面
- iOS多重巢狀頁面iOS巢狀
- iOS 頁面效能優化iOS優化
- java抓取HTML頁面的資料(淘寶頁面),JavaHTML
- iOS UITableView 修改屬性iOSUIView
- Swift iOS: UITableView的使用SwiftiOSUIView
- vue單頁應用如何在頁面重新整理時保留狀態資料Vue
- Android 自定義空資料提示介面 EmptyViewAndroidView
- 頁面之間傳遞資料
- 頁面資料賦值轉換賦值
- 面試:頁面載入海量資料面試
- SpringMVC之返回頁面資料SpringMVC
- .NET之頁面資料快取快取
- iOS: addObjectsFromArray 新增資料一值為空的解決辦法iOSObject
- 頁面跳轉時,統計資料丟失問題探討
- ios跳轉到通用頁面iOS
- 如何讓兩個頁面跳轉但是不重新整理頁面。返回時前一個頁面開始選擇的資料還在
- php 跳轉頁面之前彈窗提示PHP
- 關閉瀏覽器頁面時彈出是否關閉提示框瀏覽器
- 計算時間差,頁面倒數計時,安卓與ios相容問題安卓iOS
- iOS UITableView側滑刪除iOSUIView
- iOS中UITableView效能優化iOSUIView優化
- js進入詳情頁再返回到上一個列表頁面時怎麼能讓原來頁面資料不變JS
- img標籤src屬性不存在或值為空時頁面出現邊框解決方法
- Tp6 資料庫管理工具,生成前後臺CRUD頁面,直接作為後臺頁面使用資料庫
- Vue 頁面狀態保持頁面間資料傳輸的一種方法Vue
- 輸入資訊頁面js驗證,提示資訊JS