封裝全局的無網(wǎng)絡界面

時間匆忙磁奖, 隨便簡單寫了個demo提交到github了:https://github.com/FrankSunDragon/NONetwork

現(xiàn)在的APP都注重用戶的體驗贡必, 所以主流的APP都有無數(shù)據(jù)界面和無網(wǎng)絡界面的顯示來提醒用戶。有一種簡單的做法能實現(xiàn)上面那種需求雹嗦,就是在每個控制器判斷是否有網(wǎng)絡范舀,沒有的話就加在無網(wǎng)絡界面合是;但臃腫的代碼顯示不是我們這些程序猿的喜愛。
經(jīng)過上網(wǎng)搜尋資料后锭环, 理清了實現(xiàn)的基本思路:
** 1聪全、給UIViewController添加類別(分類),添加無網(wǎng)絡界面控件并成為無網(wǎng)絡數(shù)據(jù)界面的代理方法和移除控件方法辅辩;
2难礼、基于某網(wǎng)絡請求框架封裝的工具類中,傳入目標控制器玫锋;
3蛾茉、網(wǎng)絡請求時,在工具類中判斷是否有網(wǎng)絡撩鹿,并實現(xiàn)相應的方法臀稚。**

1、網(wǎng)絡請求工具類

我是基于afnetworking框架寫的工具類三痰,主要是封裝了簽名認證和無網(wǎng)絡返回block的處理吧寺,而加載無網(wǎng)絡界面需要傳入目標控制器。

   // 判斷是否加載網(wǎng)絡界面的普通的GET請求
 + (void)ZMG_Internet_general_getWithTarget:(nonnull UIViewController*)target  modelArr:(NSArray *)modelArr  url:(NSString *)url   params:(NSDictionary *)params   success:(void (^)(id json))success failure:(void (^)(NSError *error))failure connect:(void(^)(BOOL internet))IsAvailable; 

這個方法里target參數(shù)是目標控制器散劫;
modelArr就是判斷現(xiàn)在控制器所在的view有沒有數(shù)據(jù)稚机,有數(shù)據(jù)沒有網(wǎng)絡就彈出一個HUD,沒數(shù)據(jù)沒有網(wǎng)絡的情況下,才像是無網(wǎng)絡界面获搏。
IsAvailable參數(shù)就是回調(diào)的block赖条,yes為有網(wǎng)絡,no為無網(wǎng)絡常熙;

+ (void)ZMG_Internet_general_getWithTarget:(nonnull UIViewController*)target  modelArr:(NSArray *)modelArr  url:(NSString *)url   params:(NSDictionary *)params   success:(void (^)(id json))success failure:(void (^)(NSError *error))failure connect:(void(^)(BOOL internet))IsAvailable{
//1. 檢測網(wǎng)絡
BOOL  intenet = [GlobalVariables isExistenceNetwork];
if(IsAvailable){
    IsAvailable(intenet);
}
if(intenet == NO){// 沒有網(wǎng)絡
    if(modelArr.count>0)  return;// 如果已有數(shù)據(jù)纬乍,然后沒有網(wǎng)絡
    
    [target showNotInternetView];
    
}else{  // 有網(wǎng)絡
    // 打印請求的路徑和參數(shù)
    [target hiddenNotInternetView];
    
    NSString* str = @"";
    for (NSString *key in params) {
        NSString* str2 = [[NSString alloc] initWithFormat:@"%@=%@&", key,params[key] ];
        str = [str stringByAppendingString:str2];
    }
    //  NSLog(@"%@?%@\n%@",url,str,params);
    
    // 2.創(chuàng)建請求管理者
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
       mgr.requestSerializer.timeoutInterval = TIMEOUTINTERVAL;
    // 3.發(fā)送請求
    [mgr GET:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
        if (success) {
            success(responseObject);
        }
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        if (failure) {
            failure(error);
        }
    }];

}

}

2、 UIViewController+FDNotNetController分類

- (void)showNotInternetView
{
NSInteger tag = 0;
for (UIView* view in self.view.subviews) {
    if ([view isKindOfClass:[FDNotInternetView class]]) {
        tag++;
    }
}
if(tag>0)
    return;
CGFloat YY = 64;
if([self isKindOfClass:[FDBaseTableViewController class]]){
    YY = 0;
}

FDNotInternetView  * view = [[FDNotInternetView alloc] initWithFrame:CGRectMake(0, YY, SYFWidth, SYFHeight-YY)];
view.delegate = self;

[self.view addSubview:view];
}
- (void)hiddenNotInternetView
{
for (UIView* view in self.view.subviews) {
    if ([view isKindOfClass:[FDNotInternetView class]]) {
        [view removeFromSuperview];
    }
}
}
  //無網(wǎng)絡控件的代理方法
- (void) reloadNetworkRequest:(id)sender
{
if ([self respondsToSelector:@selector(reloadRequest)]) {
    [self performSelector:@selector(reloadRequest)];
}
}

1裸卫、自定義無網(wǎng)絡控件

#import <UIKit/UIKit.h>
@protocol FDNotInternetViewDelegate  <NSObject>
- (void)reloadNetworkRequest:(id)sender;
@end
@interface FDNotInternetView : UIView
/**
 *  由代理控制器去執(zhí)行刷新網(wǎng)絡
 */
@property (nonatomic, weak) id<FDNotInternetViewDelegate>delegate;
@end

在FDNotInternetView.m文件里仿贬,點擊重新加載的實現(xiàn)方法:
- (void)reloadNetworkDataSourcer:(id)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(reloadNetworkRequest:)]) {
[self.delegate performSelector:@selector(reloadNetworkRequest:) withObject:sender];
}
}

最關鍵的一步: 要在控制器里面寫reloadRequest方法,來實現(xiàn)重新加載墓贿;



最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末茧泪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子聋袋,更是在濱河造成了極大的恐慌队伟,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幽勒,死亡現(xiàn)場離奇詭異嗜侮,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門锈颗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缠借,“玉大人,你說我怎么就攤上這事宜猜∑梅担” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵姨拥,是天一觀的道長绅喉。 經(jīng)常有香客問我,道長叫乌,這世上最難降的妖魔是什么柴罐? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮憨奸,結果婚禮上革屠,老公的妹妹穿的比我還像新娘。我一直安慰自己排宰,他們只是感情好似芝,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著板甘,像睡著了一般党瓮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盐类,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天寞奸,我揣著相機與錄音,去河邊找鬼在跳。 笑死枪萄,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的猫妙。 我是一名探鬼主播瓷翻,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吐咳!你這毒婦竟也來了逻悠?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤韭脊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后单旁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沪羔,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔫饰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琅豆。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖篓吁,靈堂內(nèi)的尸體忽然破棺而出茫因,到底是詐尸還是另有隱情,我是刑警寧澤杖剪,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布冻押,位于F島的核電站,受9級特大地震影響盛嘿,放射性物質發(fā)生泄漏洛巢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一次兆、第九天 我趴在偏房一處隱蔽的房頂上張望稿茉。 院中可真熱鬧,春花似錦芥炭、人聲如沸漓库。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽米苹。三九已至,卻和暖如春砰琢,著一層夾襖步出監(jiān)牢的瞬間蘸嘶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工陪汽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留训唱,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓挚冤,卻偏偏與公主長得像况增,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子训挡,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,187評論 25 707
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫澳骤、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,109評論 4 62
  • 原文鏈接:https://github.com/opendigg/awesome-github-android-u...
    IM魂影閱讀 32,942評論 6 472
  • 1澜薄、看到這個問題我的第一反應是到底選擇讓誰上車为肮,真的很難取舍。文中最后的答案讓人眼前一亮(我怎么就沒想到呢肤京?)颊艳,橫...
    青墨QINGMO閱讀 91評論 0 1