最近不是很忙晋涣,整理了一下項目中用到的部分功能進行了封裝以及優(yōu)化
這里要介紹的便是可以一行代碼完成tableview空數(shù)據(jù)時的占位界面
tableview大家經(jīng)常都可以用到,但是在處理空數(shù)據(jù)時姜钳,很多項目都已經(jīng)做了空數(shù)據(jù)時的占位界面處理,這對用戶來說十分友好形耗。因為自己的項目經(jīng)常有表格的界面哥桥,之前一直按照需求去加這種占位界面,但是界面漸漸多了起來激涤,感覺很難受拟糕,每次都要去寫界面。而項目一直趕進度昔期,暫時也沒有去進行優(yōu)化已卸。最近閑了下來,便著手進行優(yōu)化和封裝硼一。
做這個的時候累澡,有去了解一些主流的封裝方式,有的采用的是自己封裝一個父類的tableView般贼,雖然這很方便愧哟,但是對于一些一開始就沒有用這個父類的項目來說,不是太友好哼蛆,有很多潛伏的危險蕊梧。這種方式,我比較推薦一開始就使用腮介,而不是在項目優(yōu)化的時候改成繼承別人寫的父類的tableViewController肥矢。這里說一下我用的方式,
主要的就是根據(jù)KVO來判斷是否要在tableViewController上加上一個view去做遮擋叠洗,形成一個占位界面甘改。
這里最主要的方法
/*!
@method
@abstract 根據(jù)傳入的tableview 加入當數(shù)組為空時的占位圖名稱為icon的圖片界面
@discussion 需要正確傳參,iconname 是占位圖片的名字
@param view 當前要使用占位界面的tableview
@param array 當前要使用占位界面的tableview的數(shù)據(jù)源數(shù)組
@param icon 當前要使用占位界面的圖片名稱
@param viewClicked 點擊圖片的回調(diào)
*/
-(void)showCenterWithSuperView:(UIView *)view array:(NSArray *)array iconName:(NSString *)icon viewClicked:(ViewClicked)viewClicked;
使用方式也很簡單
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
[self.view addSubview:self.tableView];
self.dataArray=[NSMutableArray array];
[[LPPlaceHolderViewTableView shareNoDataPlacehodelView] showCenterWithSuperView:self.tableView array:self.dataArray iconName:@"圖表無數(shù)據(jù)" viewClicked:^{
[self addArrayData];
}];
// Do any additional setup after loading the view, typically from a nib.
}
注意C鹨帧J!
因為是通過KVO監(jiān)測的腾节,所有當你的tableViewController的數(shù)據(jù)源改變時(也就是代碼中的 self.dataArray)忘嫉,一定要重新賦值!0赶佟庆冕!
-(void)addArrayData {
[self.dataArray addObject:@"--1-- 有數(shù)據(jù)源啦!Eァ7玫荨!P取力九!"];
[self.dataArray addObject:@"--2-- 有數(shù)據(jù)源啦KM!5啊W丶妗!抵乓!"];
[self.dataArray addObject:@"--3-- 有數(shù)據(jù)源啦0橹俊!T痔俊>ビ蟆!蜈出!"];
[self.dataArray addObject:@"--4-- 有數(shù)據(jù)源啦L锩帧!U≡M迪谩!燕刻!"];
// 需要重指向行觸發(fā)KVO
[LPPlaceHolderViewTableView shareNoDataPlacehodelView].NoDataPlacehodelViewDataArray = self.dataArray;
}
- (IBAction)deleteDataButtonAction:(id)sender {
[self.dataArray removeAllObjects];
// 需要重指向行觸發(fā)KVO
[LPPlaceHolderViewTableView shareNoDataPlacehodelView].NoDataPlacehodelViewDataArray = self.dataArray;
//
}
Untitled.gif
最后附上demo地址:https://github.com/bommmmmmm/PlaceHodelViewTableView 求個star喲~~~~~
個人的blog:https://bommmmmmm.github.io