CYLTableViewPlaceHolder【一行代碼完成“空TableView占位視圖”管理】
pod-v1.0.6
Objective--C-compatible
platform-iOS-6.0+
導航
與其他框架的區別
- | 特點 | 解釋 |
---|---|---|
1 | 輕量級、無污染 | 基于 UITableView 分類,無污染,比基于子類化、繼承的框架更加輕量級 |
2 | 低耦合 | 自定義占位視圖的可自行實現,通過協議傳遞,耦合性極低。 |
3 | 簡單,無學習成本 | 一行代碼完成,僅需使用 cyl_reloadData 代替 reloadData 即可。自動檢測是否需要 addSubview 和 removeFromSuperview ,省去學習繁瑣的 add 和 remove 的調用時機。 |
4 | 使用方法簡單 |
CYLTableViewPlaceHolder 基于 dataSource 數據源,所以只需操作 dataSource 數據源,即可完成占位視圖的 addSubview 和 removeFromSuperview 的時機,更加直觀。搭配 MJRefresh 使用十分方便,demo 中也給出了搭配使用方法。 |
5 | 支持CocoaPods | 容易集成 |
(學習交流群:523070828)
集成后的效果
集成后的效果
使用CYLTableViewPlaceHolder
三步完成:
第一步:使用cocoaPods導入CYLTableViewPlaceHolder
在 Podfile
中如下導入:
pod 'CYLTableViewPlaceHolder'
然后使用 cocoaPods
進行安裝:
建議使用如下方式:
# 不升級CocoaPods的spec倉庫
pod update --verbose
第二步:遵循協議
導入頭文件
#import "CYLTableViewPlaceHolder.h"
遵循協議
@interface ViewController ()<CYLTableViewPlaceHolderDelegate>
實現協議方法:
僅一個必須實現的協議方法:
創建一個自定義的占位視圖并返回
@required
/*!
@brief make an empty overlay view when the tableView is empty
@return an empty overlay view
*/
- (UIView *)makePlaceHolderView;
這里注意兩點:
-
CYLTableViewPlaceHolder 的
cyl_reloadData
方法內部會重新將該占位視圖的 frame 進行設置,設置為與當前的的TableView
一致:包括 xy 坐標和寬高。防止TableView
位置或尺寸的變更。 - 以上步驟,包括遵循協議實現協議方法,既可以在自定義的
TableView
中去做,也可以在TableView
的代理中去做。
既可以讓代理遵循協議,實現協議方法:
@interface ViewController ()<CYLTableViewPlaceHolderDelegate>
也可以讓自定義的 TableView
遵循協議,實現協議方法:
@interface MyTableView ()<CYLTableViewPlaceHolderDelegate>
這里推薦在自定義的 TableView
中實現,以降低耦合性,同時也可以為 Controller 瘦身。
占位視圖的點擊事件等,請自行在 - (UIView *)makePlaceHolderView;
中所創建的 View 中實現。
另外,占位視圖默認的設置是不能滾動的,也就不能下拉刷新了,但是如果想讓占位視圖可以滾動,則需要實現下面的可選代理方法。
@optional
/*!
@brief enable tableView scroll when place holder view is showing,it is disabled by default.
@attention There is no need to return NO , it will be NO by default
@return enable tableView scroll, you can only return YES
*/
- (BOOL)enableScrollWhenPlaceHolderViewShowing;
第三步:使用cyl_reloadData代替reloadData
使用方法:
僅需使用 cyl_reloadData
代替 reloadData
即可。
[self.tableView cyl_reloadData];
注意: cyl_reloadData
內部已經實現了 [self.tableView reloadData];
方法,請避免重復調用。
運行Demo
demo 的刷新組件使用的是 MJRefresh,所以需要導入相應的 CocoaPods 庫
# 打開終端,進入 clone 的文件夾
cd /Users/YourUserName/Documents/CYLTableViewPlaceHolder
# 如果提示找不到庫,則可去掉 --no-repo-update
pod install --verbose --no-repo-update
open CYLTableViewPlaceHolder.xcworkspace
(更多iOS開發干貨,歡迎關注 微博@iOS程序犭袁 )
Posted by 微博@iOS程序犭袁
原創文章,版權聲明:自由轉載-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0