这是我的刷新控件代码。
var refreshControl = UIRefreshControl()
override func viewDidLoad() {
super.viewDidLoad()
self.title = "Airport List"
airportTable.delegate = self
airportRequest.delegate = self
airportRequest.fetchAirports()
airportTable.dataSource = self
refreshControl.addTarget(self, action: #selector(refresh), for: UIControl.Event.valueChanged)
airportTable.addSubview(refreshControl)
}
@objc func refresh(sender: UIRefreshControl) {
airportRequest.fetchAirports()
sender.endRefreshing()
}
在下面的图像中,您可以看到动画无法正常工作。我该如何解决。最好,我希望动画继续进行,直到tableView被更新。
您在调用fetchAirports()
后立即结束动画,我认为这是异步网络请求或延迟完成的内容。
如果要等到提取机场并更新表后,请向该函数添加一个完成闭包。像这样的东西:
func fetchAirports(@escaping completion: (() -> Void) {
// Perform the network request and once it finishes, call completion()
networkRequest() {
completion()
}
}
然后使用您的刷新方法:
@objc func refresh(sender: UIRefreshControl) {
airportRequest.fetchAirports(completion: { [weak self] in
self?.sender.endRefreshing()
})
}
尝试一下..
@objc func refresh(sender: UIRefreshControl) {
sender.beginRefreshing()
airportRequest.fetchAirports(completion: { [weak self] in
tableView?.reloadData()
self?.sender.endRefreshing()
})
}
您可以在向表中插入新数据后调用此方法。
refreshControl.endRefreshing()