拉到tableviewcontroller加载刷新

时间:2015-04-08 16:39:59

标签: uitableview swift uirefreshcontrol

我正在使用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()

重新加载数据,但动画不能正常工作。 该表保持空白。然后,当获取所有数据时,表被拉下(就像我手动拉动刷新时),立即将其推回。

任何人都知道是否可以更改/修复此问题?

1 个答案:

答案 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上发布了问题(如果您能在此处找到答案,我会提供归因,因为这是我第一次提出问题的地方解决方案)。