测试已测试 | ✗ |
语言语言 | Obj-CObjective C |
许可证 | MIT |
发布上次发布 | 2014年12月 |
由 Rich Robinson 维护。
使用标准的 iOS UIRefreshControl
来实现常规 UITableView
的“下拉刷新”功能的一个简单解决方案。
假设您有一个现有的项目,其中的现有表格视图是由现有视图控制器管理的(该控制器不是 UITableViewController
的子类)。也许您的视图控制器是项目中使用的自定义视图控制器的子类。
然后假设出现了一个需求:您的表格视图需要支持“下拉刷新”。
您认为这应该很简单,因为如今 iOS 提供了这项功能。然而,您调查后发现,这仅在您使用 UITableViewController
时才成立。
假设您不想重写代码并可能破坏视图控制器继承层次结构,那么 RCRTableViewRefreshController
就是您问题的快速且简单的解决方案,您将很快在表格视图上用标准的 iOS UIRefreshControl
上线。
RCRTableViewRefreshController
依赖于 Xcode 5 及更高版本(尽管请注意,示例项目是为 Xcode 6 设计的,并且需要修改才能与 Xcode 5 一起使用)。
RCRTableViewRefreshController
已经测试过 iOS 7 和 iOS 8(请注意,示例项目是为 8 设计的,但可以在 7 上运行)。
所有代码都使用 ARC。
首先,将 RCRTableViewRefreshController
文件夹和代码添加到您的项目中。
然后,使用刷新控制器的一种方式如下。
将 RCRTableViewRefreshController.h
导扰到您表格关联的视图控制器中
#import "RCRTableViewRefreshController.h"
接下来,为刷新控制器添加一个属性
@property (nonatomic, strong) RCRTableViewRefreshController *refreshController;
然后,在您的 viewDidLoad
方法中,初始化刷新控制器,传递一个指向您的表格视图的引用,并传递一个当用户下拉以刷新时调用的代码块。例如,假设您有一个名为 tableView
的属性用于您的表格
// Setup our refresh controller, with our table view and some code to perform when the user pulls down
self.refreshController = [[RCRTableViewRefreshController alloc] initWithTableView:self.tableView refreshHandler:^{
// Act on the request to refresh the table view
// (Insert your data refreshing logic here)
}];
最后,当您完成刷新数据(这可能通过某种回调发生)时,通知控制器完成刷新
[self.refreshController endRefreshing];
您可能还希望在此处重新加载表格数据,如果您尚未采取此措施。再次假设您有一个名为 tableView
的属性
[self.tableView reloadData];
注意:由于这两个步骤会更新用户界面,因此应从主队列中调用。例如
dispatch_async(dispatch_get_main_queue(), ^{
[self.refreshController endRefreshing];
[self.tableView reloadData];
});
可以在 RCRTableViewRefreshControllerSample
文件夹中找到演示刷新控制器的示例项目。
MIT 许可证(见存储库根目录下的 LICENSE
文件)。