最近不是很忙,整理了一下項(xiàng)目中用到的部分功能進(jìn)行了封裝以及優(yōu)化
這里要介紹的便是可以一行代碼完成tableview空數(shù)據(jù)時(shí)的占位界面
tableview大家經(jīng)常都可以用到,但是在處理空數(shù)據(jù)時(shí),很多項(xiàng)目都已經(jīng)做了空數(shù)據(jù)時(shí)的占位界面處理,這對(duì)用戶來(lái)說(shuō)十分友好。因?yàn)樽约旱捻?xiàng)目經(jīng)常有表格的界面,之前一直按照需求去加這種占位界面,但是界面漸漸多了起來(lái),感覺(jué)很難受,每次都要去寫界面。而項(xiàng)目一直趕進(jìn)度,暫時(shí)也沒(méi)有去進(jìn)行優(yōu)化。最近閑了下來(lái),便著手進(jìn)行優(yōu)化和封裝。
做這個(gè)的時(shí)候,有去了解一些主流的封裝方式,有的采用的是自己封裝一個(gè)父類的tableView,雖然這很方便,但是對(duì)于一些一開始就沒(méi)有用這個(gè)父類的項(xiàng)目來(lái)說(shuō),不是太友好,有很多潛伏的危險(xiǎn)。這種方式,我比較推薦一開始就使用,而不是在項(xiàng)目?jī)?yōu)化的時(shí)候改成繼承別人寫的父類的tableViewController。這里說(shuō)一下我用的方式,
主要的就是根據(jù)KVO來(lái)判斷是否要在tableViewController上加上一個(gè)view去做遮擋,形成一個(gè)占位界面。
這里最主要的方法
/*!
@method
@abstract 根據(jù)傳入的tableview 加入當(dāng)數(shù)組為空時(shí)的占位圖名稱為icon的圖片界面
@discussion 需要正確傳參,iconname 是占位圖片的名字
@param view 當(dāng)前要使用占位界面的tableview
@param array 當(dāng)前要使用占位界面的tableview的數(shù)據(jù)源數(shù)組
@param icon 當(dāng)前要使用占位界面的圖片名稱
@param viewClicked 點(diǎn)擊圖片的回調(diào)
*/
-(void)showCenterWithSuperView:(UIView *)view array:(NSArray *)array iconName:(NSString *)icon viewClicked:(ViewClicked)viewClicked;
使用方式也很簡(jiǎn)單
- (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:@"圖表無(wú)數(shù)據(jù)" viewClicked:^{
[self addArrayData];
}];
// Do any additional setup after loading the view, typically from a nib.
}
注意?。?!
因?yàn)槭峭ㄟ^(guò)KVO監(jiān)測(cè)的,所有當(dāng)你的tableViewController的數(shù)據(jù)源改變時(shí)(也就是代碼中的 self.dataArray),一定要重新賦值?。?!
-(void)addArrayData {
[self.dataArray addObject:@"--1-- 有數(shù)據(jù)源啦!?。。。?!"];
[self.dataArray addObject:@"--2-- 有數(shù)據(jù)源啦?。。。。?!"];
[self.dataArray addObject:@"--3-- 有數(shù)據(jù)源啦!?。。。。?];
[self.dataArray addObject:@"--4-- 有數(shù)據(jù)源啦?。。。。?!"];
// 需要重指向行觸發(fā)KVO
[LPPlaceHolderViewTableView shareNoDataPlacehodelView].NoDataPlacehodelViewDataArray = self.dataArray;
}
- (IBAction)deleteDataButtonAction:(id)sender {
[self.dataArray removeAllObjects];
// 需要重指向行觸發(fā)KVO
[LPPlaceHolderViewTableView shareNoDataPlacehodelView].NoDataPlacehodelViewDataArray = self.dataArray;
//
}

最后附上demo地址:https://github.com/bommmmmmm/PlaceHodelViewTableView 求個(gè)star喲~~~~~
個(gè)人的blog:https://bommmmmmm.github.io
簡(jiǎn)書地址:http://www.itdecent.cn/u/955aaff4602f