【发布时间】:2017-01-08 15:33:51
【问题描述】:
我在我的 tableview 上使用UIRefreshControl 来更新项目。最后,我显示一个UIAlertController 来通知用户更新已完成,以及更新了多少项目。非常简单,它适用于一件事。如果我连续多次拉动刷新,有时刷新控件不会被解除,即使在解除警报之后也是如此。我需要向上滑动桌子才能让它消失。
这是我使用的代码,所有 UI 的东西都在主线程上很好地完成了:
if(refreshControl.refreshing) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self refreshItems];
dispatch_async(dispatch_get_main_queue(), ^{
[refreshControl endRefreshing];
[self.tableView reload];
[self showUpdateInfo];
});
});
}
知道是什么原因造成的吗?
编辑:这就是我在代码中创建刷新控件的方式(viewDidLoad):
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString: @"Checking for updates…"];
[refreshControl addTarget: self
action: @selector(refreshOutdatedItems)
forControlEvents: UIControlEventValueChanged];
self.refreshControl = refreshControl;
【问题讨论】:
-
您是在代码中创建 UIRefreshControl 还是使用 TableViewController 属性?
-
查看我的问题中的编辑。
-
我试图重现该问题。您的代码似乎按预期工作。顺便说一句,您的 dispach_sync 实际上让我崩溃了。这是故意的还是应该是 dispatch_async ?
-
这是一个错字,已修复。
-
我能够在模拟器中重现该问题。如果我快速刷新表格两次 UIAlertController 显示但 tableview 永远不会恢复并卡在中间并且它显示 refreshcontroller 仍在旋转。我猜 tableview 在显示警报控制器时没有足够的时间向上滚动并冻结。可能需要设置一些小计时器才能让 tableview 有机会备份。
标签: ios objective-c uialertcontroller uirefreshcontrol