Obj-C - 添加活动指示器以下拉刷新?
Posted
技术标签:
【中文标题】Obj-C - 添加活动指示器以下拉刷新?【英文标题】:Obj-C - Add activity indicator to pull down to refresh? 【发布时间】:2020-08-28 15:28:06 【问题描述】:我在 ViewController 中的 TableView 中添加了“下拉刷新”功能。数据刷新完美,但我想知道如何在执行刷新时将经典活动指示器添加到顶部?
ViewController.m
- (void)viewDidLoad
[super viewDidLoad];
[_refreshControl addTarget:self action:@selector(refreshData) forControlEvents:UIControlEventValueChanged];
//[self.mytable addSubview:refreshControl];
UITableViewController *tableViewController = [[UITableViewController alloc] init];
tableViewController.tableView = self.tableView;
tableViewController.refreshControl = _refreshControl;
-(void)refreshData
UITableViewController *tableViewController = [[UITableViewController alloc] init];
tableViewController.tableView = self.tableView;
[self.tableView reloadData];
[tableViewController.refreshControl endRefreshing];
【问题讨论】:
大家可以在这里找到快速版本的刷新控制cocoacasts.com/… 【参考方案1】:问题似乎在于viewDidLoad
和refreshData
都在创建新的tableViewControllers
,但他们应该更新您现有的。
如果ViewController.m
中的类是UITableViewController
的子类,则可以更新代码以使用当前视图控制器。
- (void)viewDidLoad
[super viewDidLoad];
[_refreshControl addTarget:self action:@selector(refreshData) forControlEvents:UIControlEventValueChanged];
self.refreshControl = _refreshControl;
-(void)refreshData
[self.tableView reloadData];
[self.refreshControl endRefreshing];
另一个问题是refreshData
立即调用endRefreshing
,因此刷新控制器在结束之前没有任何时间可见。通常你会运行一个异步任务,比如网络请求,然后在完成后调用endRefreshing
。要伪造它,您可以延迟致电endRefreshing
使用以下内容。
-(void)refreshData
// Wait 1 sec before ending refreshing for testing
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^
[self.tableView reloadData];
[self.refreshControl endRefreshing];
);
【讨论】:
大家可以在这里找到快速版本的刷新控制cocoacasts.com/… 刷新开始时,我仍然没有显示活动指示器?【参考方案2】:这就是最终的工作!
ViewController.h
@property (nonatomic, strong) UIRefreshControl *refreshControl;
ViewController.m
- (void)viewDidLoad
[super viewDidLoad];
self.refreshControl = [[UIRefreshControl alloc] init];
self.refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@"Pull To Refresh"];
[self.refreshControl addTarget:self action:@selector(refreshData) forControlEvents:UIControlEventValueChanged];
[self.tableView addSubview:self.refreshControl];
-(void)refreshData
// Wait 1 sec before ending refreshing for testing
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^
[self.tableView reloadData];
[self.refreshControl endRefreshing];
);
【讨论】:
以上是关于Obj-C - 添加活动指示器以下拉刷新?的主要内容,如果未能解决你的问题,请参考以下文章