RCRTableViewRefreshController 1.0.2

RCRTableViewRefreshController 1.0.2

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2014年12月

Rich Robinson 维护。



  • 作者:
  • 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 文件)。