使用AFNetworking時,怎么優(yōu)雅的顯示網絡丟失(network lost)占位符

大家在開發(fā)APP的時候總會碰到call接口網絡超時或者網絡丟失的情況,那么這種情況下比較好的用戶體驗是在當前頁面展示一個占位符,占位符上有重新刷新頁面的按鈕讓用戶可以重新刷新頁面,效果如下:

WechatIMG59.jpeg

給頁面加一個占位符是很簡單的,但是怎么做一個全局的占位符機制是我們需要做的,因為任何頁面都有可能觸發(fā)這個機制,如果對所有的ViewController都加一個占位符的方法,會顯得很多余。我對這個機制的做法是這樣的:

添加placeholder機制:

  • 在項目里我會有一個UIViewController的基類,叫做BaseViewController,項目里所有業(yè)務相關的UIViewController都會基于這個BaseViewController,在這個基類里,我加了一個方法叫handleErrorMessage:(NSError *)error,這個方法會處理網絡請求返回的錯誤信息,在AFNetworking里當errorCode是-1009的時候代表網絡丟失,這種情況下,我們將要給當前的ViewController加上網絡丟失的placeholder

網絡請求重新加載機制:

  • 首先,在項目里我會有一個protocol給所有的ViewController可以implement,暫且叫ViewController,在這個protocol里我會加上一些每個UIViewController可能會用到的方法,其中一個方法叫 -(void)reloadView,這個方法是用來重新call當前頁面的網絡請求,簡單說就是用戶按下placeholder頁面上重新加載的button,會調用當前ViewController里的reloadView方法
  • 在重新加載網絡請求成功后,發(fā)送一個notification

去除placeholder機制:

  • BaseViewController里,我們會observe網絡請求成功的notification,然后隱藏當前ViewController的placeholder

完整demo代碼如下:

BaseViewController.m

- (void)handleErrorMessage:(NSError *)error
{
    // ViewController network request failed
    if (error.code == -1009) {
        [self showNetworkLostPlaceholder];
    }
}

#pragma mark - <Network Success Notification>
- (void)requestSuccess:(NSNotification *)notification
{
    // ViewController network request successfully
    [self hideNetworkLostPlaceholder];
}

#pragma mark - <Placeholder Delegate>
- (void)reloadButtonClicked
{
    // placeholder page reload button clicked
    if ([(id<ViewController>)self respondsToSelector:@selector(reloadView)]) {
        // this will make current UIViewController request network
        [(id<ViewController>)self reloadView];
    }
}

ViewController.h

@protocol ViewController <NSObject>

@optional

- (void)reloadView;

@end

轉載請注明出處,原文地址:http://kobedai.me/p9rsts-6e/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容