我在实现UIRefreshControl时遇到问题 - 因为当你下拉时,'blob'工作得非常好,刷新微调器工作正常,但是tableView在刷新时不会向上滚动到微调器。相反,它会保持原样,直到刷新完成,此时它将返回到屏幕顶部
进行刷新的代码是:
- (void)viewDidLoad {
self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl addTarget:self action:@selector(refreshView:)forControlEvents:UIControlEventValueChanged];
}
- (void)refreshView:(UIRefreshControl *)refresh {
dispatch_async(dispatch_get_main_queue(), ^{
(...code to get new data here...)
[self.refreshControl endRefreshing];
}
}
我发现没有dispatch_async,即使刷新微调器也不起作用 - 并且下拉的位显示为白色
有没有人有任何线索我可能做错了什么?我发现的所有实现示例似乎与我正在做的相符,我在API文档中没有发现任何暗示我遗漏任何内容的内容
答案 0 :(得分:16)
您可以更改为以下
- (void)refreshView:(UIRefreshControl *)refresh {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// (...code to get new data here...)
dispatch_async(dispatch_get_main_queue(), ^{
//any UI refresh
[self.refreshControl endRefreshing];
});
});
}
-refreshView:将在主线程上调用,所有UI更新都使用主线程。因此,如果您使用主线程“代码获取新数据”,它将“卡住”