前言
由于公司項目做的新聞資訊,必然少不了對于無新聞內容
的展示和對于無網絡
時的展示
舉個例子:當加載新聞詳情頁時處于一個無網絡狀態時,我們就需要對其進行展示無網絡圖片,好了,需求明白了
來張gif
圖瞬間明了
應用中示例.gif
不墨跡,直接貼github
,希望各路大神來噴
開啟傳送門:
先來張demo
展示圖
demo示例.gif
思路
首先肯定應該能做到全局對于ViewController
進行無網絡/無內容展示,那么索性直接對UIViewController
添加方法 (類別)
其次若展示無內容時,應需要針對數據源
進行判斷展示,例如當數據源
為空時,即展示無內容
,那么方法參數里起碼應該包含數據源個數信息
其次就是因人而異,任人發揮的自定義樣式
問題了,這個不做過多解釋
注意大神可以移步了,以下是很基礎的解釋說明,耐心的就多看一會吧,支持一下
所有文件
類建的雖然多,但我覺得不能少,為了以后好維護,可以多增加一些功能,整體框架不能變,隊形不能散
UIViewController+WyhShowEmpty
為主體文件,處理布局和邏輯判斷,說到布局,就需要運用一點最基礎的<objc-runtime>
機制在類別中添加屬性
Style文件
是單獨抽出來的類, 用于處理所有子控件的樣式,這也是最合理的部分,這樣就實現了對于樣式的抽離,在主體文件是根據樣式進行分配init
的
其他類不做過多解釋了,代碼大家下載去看吧
應用中實際調用代碼示例:
-(void)loadNetWork{
[[AFHTTPSessionManager manager] POST:url parameters:body progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if ([responseObject[@"code"] isEqualToNumber:@0]) {
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
//成功回調里添加
[self wyh_showEmptyMsg:@"很抱歉暫無更新" dataCount:self.dataSource];
});
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//失敗回調里添加
[self wyh_showEmptyMsg:@"網絡不給力,點擊刷新" dataCount:0 isHasBtn:YES Handler:^{
[self loadNetWork];
}];
}];
}
修復內容如下
增加對于UIView的類別,并使其成為底層實現,ViewController是針對UIView的封裝
修復了在移除empty后依然有點擊事件的bug
修復了在不同尺寸的View上還依然展示屏幕大小的empty的bug
喜歡的github
幫點個star
,支持一下,謝謝各位