Obj-C - 添加活动指示器以下拉以刷新?



我在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];


}

看起来问题是viewDidLoadrefreshData都在创建新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];
});
}

这就是最终起作用的原因!

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];
});
}

相关内容

  • 没有找到相关文章

最新更新