我正在使用UIRefreshControl在表格视图上启用“拉动 - 刷新”手势。
我使用了故事板te设置RefershControl并在我的TableViewController中使用以下代码将方法绑定到RefeshControl:
self.refreshControl?.addTarget(self, action: Selector("getData"), forControlEvents: UIControlEvents.ValueChanged)
在getData()方法结束时,我在tableview上调用reloadData()方法,在refreshcontrol上调用stopRefreshing()方法。
这很好用。我可以刷新并更新表格。
我想要的下一件事是在加载TableViewController时启动RefreshControl。向用户显示应用正在获取数据。 我试图手动启动以下代码:
self.refreshCorntrol?.beginRefreshing()
getData()
重新加载数据,但动画不能正常工作。 该表保持空白。然后,当获取所有数据时,表被拉下(就像我手动拉动刷新时),立即将其推回。
任何人都知道是否可以更改/修复此问题?
答案 0 :(得分:1)
可能会发生两件事。
1。 UI更新必须在主线程上分派。
您正在使用它的.reloadData()
方法更新tableView,这被认为是对UI的更新。话虽如此,您必须在主线程上调用.reloadData()
。尽管这应该已经为您自动完成,但是在某些情况下,我需要手动将其移至主线程。可以使用
DispatchQueue.main.async {
// Update UI ie. self.tableView.reloadData()
}
功能内部。
2。编程拉取刷新并不总是针对.valueChanged
运行在调用拉刷新功能时,调用.valueChanged
(或在代码中为UIControlEvents.ValueChanged
)很重要,这样它就知道要刷新的内容。当用户请求刷新时,您的程序已经在refreshController声明的forControlEvents
段中进行了刷新。但是,当您从代码中手动调用它时,默认情况下不会执行此操作。相反,您必须使用sendActions
通过操作。这可以通过使用
self.refreshControl?.beginRefreshing()
self.refreshControl?.sendActions(for: UIControlEvents.ValueChanged)
getData()
调用请求刷新,而不仅仅是调用.beginRefreshing
后记
几天前,我遇到了类似的问题,并在堆栈溢出here上发布了问题(如果您能在此处找到答案,我会提供归因,因为这是我第一次提出问题的地方解决方案)。