第三方庫之-DZNEmptyDataSet

DZNEmptyDataSet的功能是展現UITableView或者UICollectionView沒有數據時候的佔位圖. 閱讀以後發現, 實現的思路仍是很是好的.學習

DZNEmptyDataSet是經過代理方法實現主要功能的, 其無數據時候的文字說明, 佔位圖等等等信息所有都是經過代理方法來獲取的, 這樣咱們能夠經過代理方法, 徹底自定義展現內容的樣式, 使用起來靈活性更高.代理

DZNEmptyDataSet的實現, 在設置代理的時候, 利用Method Swizzling技術交換了方法的實現, 實際上系統調用UITableView的reloadData方法時候, 會調用到DZNEmptyDataSet中分類的一個方法, 這個方法實現了加載一個自定義的view, 並將元素放到tableView上面去, 例如獲取標題信息方式以下所示:code

// 返回標題的 attributedString, 經過代理方法獲取
- (NSAttributedString *)dzn_titleLabelString
{
    if (self.emptyDataSetSource && [self.emptyDataSetSource respondsToSelector:@selector(titleForEmptyDataSet:)]) {
        NSAttributedString *string = [self.emptyDataSetSource titleForEmptyDataSet:self];
        if (string) NSAssert([string isKindOfClass:[NSAttributedString class]], @"You must return a valid NSAttributedString object for -titleForEmptyDataSet:");
        return string;
    }
    return nil;
}

//從代理方法中獲取標題信息
NSAttributedString *titleLabelString = [self dzn_titleLabelString];

經過閱讀這個類學習到的是:string

  1. 在類中經過這種方式使用代理, 好吧, 我認可我沒有用過, 之前使用代理處理思路太麻煩了.
  2. 經過懶加載建立各類控件, 在獨立的方法中設置約束.
  3. Method Swizzling.
  4. 造輪子的思路, 爲之後造輪子積累了寶貴的思想.
相關文章
相關標籤/搜索