DZNEmptyDataSet,優秀的空白頁或者出錯頁封裝

来源:http://www.cnblogs.com/ios122/archive/2016/01/19/5143159.html
-Advertisement-
Play Games

主要用於UITableView和UICollectionView,也可以用於UIScrollView,其實主要是前兩個會用到空白或者網路出錯頁 採用給UIScrollView添加代理方法來給頁面添加空白頁,源碼很有學習意義


簡介

image

項目主頁:https://github.com/dzenbot/DZNEmptyDataSet

提示:主要用於UITableView和UICollectionView,也可以用於UIScrollView,其實主要是前兩個會用到空白或者網路出錯頁

採用給UIScrollView添加代理方法來給頁面添加空白頁,源碼很有學習意義

導入工程

自動,

pod 'DZNEmptyDataSet'

手動

https://github.com/dzenbot/DZNEmptyDataSet 下載解壓,Source文件夾下的文件拖入工程

導入頭文件:

#import "UIScrollView+EmptyDataSet.h"

初始化

    @interface MainViewController : UITableViewController <DZNEmptyDataSetSource, DZNEmptyDataSetDelegate>

    - (void)viewDidLoad {
         [super viewDidLoad];

         self.tableView.emptyDataSetSource = self;
         self.tableView.emptyDataSetDelegate = self;

    //這行代碼必須加上,可以去除tableView的多餘的線,否則會影響美觀
         self.tableView.tableFooterView = [UIView new];
    }

滿足代理方法,可以分別配置,都是可選的

空白頁圖片

    - (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView {
    return [UIImage imageNamed:@"empty_placeholder"];
    }

圖片的動畫效果

    - (CAAnimation *)imageAnimationForEmptyDataSet:(UIScrollView *)scrollView {
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath: @"transform"];

    animation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
    animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_2, 0.0, 0.0, 1.0)];

    animation.duration = 0.25;
    animation.cumulative = YES;
    animation.repeatCount = MAXFLOAT;

    return animation;
    }

標題文本,詳細描述,富文本樣式

    - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView {
    NSString *text = @"Please Allow Photo Access";

    NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:18.0f],
                                 NSForegroundColorAttributeName: [UIColor darkGrayColor]};

    return [[NSAttributedString alloc] initWithString:text attributes:attributes];
    }
    
    - (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView {
    NSString *text = @"This allows you to share photos from your library and save photos to your camera roll.";

    NSMutableParagraphStyle *paragraph = [NSMutableParagraphStyle new];
    paragraph.lineBreakMode = NSLineBreakByWordWrapping;
    paragraph.alignment = NSTextAlignmentCenter;

    NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:14.0f],
                                 NSForegroundColorAttributeName: [UIColor lightGrayColor],
                                 NSParagraphStyleAttributeName: paragraph};

    return [[NSAttributedString alloc] initWithString:text attributes:attributes];                      
    }

按鈕文本或者背景樣式

    - (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state {
    NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:17.0f]};

    return [[NSAttributedString alloc] initWithString:@"Continue" attributes:attributes];
    }
    
    - (UIImage *)buttonImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state {
    return [UIImage imageNamed:@"button_image"];
    }

空白頁的背景色

    - (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView {
    return [UIColor whiteColor];
    }

如果需求無法滿足,你可以自定義

    - (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView {
    //加入你自定義的view
    UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    [activityView startAnimating];
    return activityView;
    }

其他需求

    //是否顯示空白頁,預設YES
    - (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView {
    return YES;
    }
    
    //是否允許點擊,預設YES
    - (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView {
    return YES;
    }
    
    //是否允許滾動,預設NO
    - (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView {
    return YES;
    }
    
    //圖片是否要動畫效果,預設NO
    - (BOOL) emptyDataSetShouldAllowImageViewAnimate:(UIScrollView *)scrollView {
    return YES;
    }
    
    //空白頁點擊事件
    - (void)emptyDataSetDidTapView:(UIScrollView *)scrollView {
    
    }
    
    //空白頁按鈕點擊事件
    - (void)emptyDataSetDidTapButton:(UIScrollView *)scrollView {
   
    }

註: 文章由我們 iOS122(http://www.ios122.com)的小伙伴 @酌晨茗 整理,喜歡就一起參與: iOS122 任務池


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 控制器 :一個iOS的app很少只由一個控制器組成,除非這個app極其簡單當app中有多個控制器的時候,我們就需要對這些控制器進行管理有多個view時,可以用一個大的view去管理1個或者多個小view,控制器也是如此,用1個控制器去管理其他多個控制器比如,用一個控制器A去管理3個控制器B、C、D,...
  • Swift語法基礎入門三(函數, 閉包)函數:函數是用來完成特定任務的獨立的代碼塊。你給一個函數起一個合適的名字,用來標識函數做什麼,並且當函數需要執行的時候,這個名字會被用於“調用”函數格式:func 函數名稱(參數名:參數類型, 參數名:參數類型...) -> 函數返回值 { 函數實現部分 }沒...
  • UIApplication對象特點:特點1:UIApplication對象是應用程式的象徵,一個UIApplication對象就代表一個應用程式,而且是單例的。(用來封裝整個應用程式的一個對象, 比如當應用程式執行到某個時期要做什麼, 生命周期等。)獲取UIApplication對象:[UIAppl...
  • Swift開發體驗/*:創建對象* OC: alloc initWithXXX 方法* Swift: (xxx:)*//*:調用方法* OC: [UIColor redColor];* Swift UIColor.redColor()*//*:枚舉* OC: UIB...
  • 一、weak和strong 1.理解 剛開始學UI的時候,對於weak和strong的描述看得最多的就是“由ARC引入,weak相當於OC中的assign,但是weak用於修飾對象,但是他們都不會造成引用計數加1;而strong則相當於OC中規定retain,它會造成引用計數加1”。 ARC的...
  • 背景最近要做一個輪播圖的效果,網上看了幾篇文章,基本上都能找到實現,效果還挺不錯,但是在寫的時候感覺每次都要單獨去重新在Activity里寫一堆代碼。於是自己封裝了一下。本篇輪播圖實現原理原文出處:迴圈廣告位組件的實現,這裡只是做了下封裝成一個控制項,不必每次重覆寫代碼了。效果圖實現分析輪播圖的功能就...
  • NSAttributedString的使用 使label具有點擊事件 定義帶參數巨集的註意事項 pch文件基本使用規則 使用CocoaPods集成Masonry框架 Xcode7中VVDocument插件解決方案
  • 參考:http://www.cnblogs.com/hubli/p/4835549.html效果圖:1.wevbview_progressbar.xml ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...