Uitableview 在加载tableviewcontroller时拖动以刷新
我正在使用UIRefreshControl在表视图上启用pull to refresh手势 我使用了序列图像板te设置refreshControl,在我的TableViewController中,使用以下代码将方法绑定到RefeshControl: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()
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上发布了这个问题(我提供了属性,以防您在那里找到答案,因为这是我为您提供第一个解决方案的地方)