5

我在实现 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 文档中没有发现任何表明我遗漏了任何东西的内容

4

1 回答 1

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 更新都使用主线程。因此,如果您将主线程用于“获取新数据的代码”,它将“卡住”

于 2012-11-14T21:25:47.977 回答