Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Uitableview 在加载tableviewcontroller时拖动以刷新_Uitableview_Swift_Uirefreshcontrol - Fatal编程技术网

Uitableview 在加载tableviewcontroller时拖动以刷新

Uitableview 在加载tableviewcontroller时拖动以刷新,uitableview,swift,uirefreshcontrol,Uitableview,Swift,Uirefreshcontrol,我正在使用UIRefreshControl在表视图上启用pull to refresh手势 我使用了序列图像板te设置refreshControl,在我的TableViewController中,使用以下代码将方法绑定到RefeshControl: self.refreshControl?.addTarget(self, action: Selector("getData"), forControlEvents: UIControlEvents.ValueChanged) 在getData()

我正在使用UIRefreshControl在表视图上启用pull to refresh手势

我使用了序列图像板te设置refreshControl,在我的TableViewController中,使用以下代码将方法绑定到RefeshControl:

self.refreshControl?.addTarget(self, action: Selector("getData"), forControlEvents: UIControlEvents.ValueChanged)
在getData()方法的末尾,我调用tableview上的reloadData()方法和refreshcontrol上的StopRefresh()方法

这很好用。我可以拉刷新和表得到更新

接下来我要做的是在加载TableViewController时启动RefreshControl。向用户显示应用程序正在获取数据。 我试图手动启动以下代码:

self.refreshCorntrol?.beginRefreshing()
getData()
它会重新加载数据,但动画无法正常工作。 桌子空着。然后,当获取所有数据时,表被向下拉(就像我手动拉以刷新时),en立即向上推


有人知道是否有可能改变/修复此问题吗?

可能会发生两件事

1。UI更新必须在主线程上调度。

您正在使用tableView的
.reloadData()
方法更新tableView,该方法被视为对UI的更新。也就是说,您必须在主线程上调用
.reloadData()
。虽然这应该已经为您自动完成,但我遇到了一些需要手动将其移动到主线程的情况。这可以通过使用

DispatchQueue.main.async {
  // Update UI ie. self.tableView.reloadData()
}
在你的功能里面

2。编程拉取刷新并不总是针对.valueChanged运行

调用pull refresh函数时,调用
.valueChanged
(或者在代码中调用
UIControlEvents.valueChanged
)非常重要,以便它知道刷新的目的。当用户拉刷新时,您的程序已经在refreshController声明的
forControlEvents
段中执行了该操作。但是,当您从代码中手动调用它时,默认情况下不会这样做。相反,您必须使用
sendActions
传递操作。这可以通过使用

self.refreshControl?.beginRefreshing()
self.refreshControl?.sendActions(for: UIControlEvents.ValueChanged)
getData()
调用拉刷新,而不仅仅是调用
.beginRefreshing

后记

几天前我遇到了一个类似的问题,并在Stack Overflow上发布了这个问题(我提供了属性,以防您在那里找到答案,因为这是我为您提供第一个解决方案的地方)