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