我在容器内有一个表格视图。当用户向下滑动以刷新时,我注意到单元格立即弹出顶部。看起来很越野车。
func setupRefresh() {
// refreshControl.attributedTitle = NSAttributedString(string: "")
refreshControl.addTarget(self, action: #selector(refresh(_:)), for: UIControl.Event.valueChanged)
tableView.insertSubview(refreshControl, at: 0)
//tableView.addSubview(refreshControl) // not required when using UITableViewController
}
@objc func refresh(_ sender:AnyObject) {
// Code to refresh table view
print("Refreshing...")
tableView.isScrollEnabled = false
array.removeAll()
items = 0
number = 0
getRecentNotifs(limit: 10)
// refreshControl.endRefreshing()
// tableView.isScrollEnabled = true
// tableView.isUserInteractionEnabled = true
}
然后在我的提取方法中,执行此操作。我还尝试在刷新过程中执行此操作,但失败了,结果仍然相同
dispatchGroup.notify(queue: .main, execute: {
if true {
if !self.tableView.isScrollEnabled {
self.refreshControl.endRefreshing()
self.tableView.isScrollEnabled = true
}
self.tableView.reloadData()
}
})
我看过here以及更多其他地方,都没有成功。
对此的一个非常不好的解决方法是:
...
Timer.scheduledTimer(timeInterval: 0.8, target: self, selector: #selector(self.delayedAction), userInfo: nil, repeats: false)
}
@objc func delayedAction() {
refreshControl.endRefreshing()
}
答案 0 :(得分:2)
将refreshControl.endRefreshing()
移至您要从中获取数据的函数的完成处理程序中。
示例:
func getRecentNotifs(limit: Int) {
// Get Data ...
Network.getData(limit: limit) { (data, error) in // Completion Block
// Update Table View
self.tableView.reloadData()
// End Refresh Control
self.refreshControl.endRefreshing()
self.activityIndicatorView.stopAnimating()
})
}
您在刷新控件的target方法中调用refreshControl.endRefreshing()
,所以它马上结束了。