【发布时间】:2018-03-24 20:20:42
【问题描述】:
我有 UIViewController 有 tableview 作为子视图。我分配了刷新控件,以便它刷新数据。
refreshControl = UIRefreshControl()
refreshControl.attributedTitle = NSAttributedString(string: "Loading...")
refreshControl.addTarget(self, action: #selector(getTableViewData), for: .valueChanged)
tableView.refreshControl = refreshControl
在 getTableViewData 中,我有多个 API 调用来接收要加载到 tableview 的基本数据。在 getTableViewData 函数的最后,我有一行代码可以重新加载 tableview。
问题在于,refreshcontrol 似乎在检测到下拉后立即触发重新加载表视图。我想禁用此默认下拉重新加载,以便我可以首先收集所有基本数据然后重新加载。无论如何我可以禁用默认重新加载吗?
在 getTableViewData 内部,代码如下:
var fetchGroup = DispatchGroup()
@objc func getReceipts(){
self.refreshControl.beginRefreshing()
self.dataSet1.removeAll()
self.dataSet2.removeAll()
self.dataSet3.removeAll()
fetchGroup.enter()
fetchGroup.enter()
fetchGroup.enter()
if let fetch1URL = URL(string: "fetchDataSet1", relativeTo: Property.baseURL){
let headers: HTTPHeaders = [
"Authorization": Property.shared.token,
"content-type": "application/json"
]
Property.alamofireManager.request(fetch1URL, headers: headers).responseJSON{ response in
//Append json data into dataSet1 here...
self.fetchGroup.leave()
}
}else{
self.fetchGroup.leave()
}
if let fetchURL2 = URL(string: "fetchDataSet2", relativeTo: Property.baseURL){
let headers: HTTPHeaders = [
"Authorization": Property.shared.token,
"content-type": "application/json"
]
let params: Parameters = [
"Temp":""
]
Property.alamofireManager.request(fetchURL2, parameters: params, headers: headers).responseJSON{ response in
//Append json data into dataSet2 here...
self.fetchGroup.leave()
}
}else{
self.fetchGroup.leave()
}
if let fetch3URL = URL(string: "fetchDataSet3", relativeTo: Property.baseURL){
let headers: HTTPHeaders = [
"Authorization": Property.shared.token,
"content-type": "application/json"
]
let params: Parameters = [
"Temp":""
]
Property.alamofireManager.request(fetch3URL, parameters: params, headers: headers).responseJSON{ response in
//Append json data into dataSet3 here...
self.fetchGroup.leave()
}
}else{
self.fetchGroup.leave()
}
fetchGroup.notify(queue: .main, execute: {
self.refreshControl.endRefreshing()
print("Going to Refresh")
self.tableView.reloadData()
})
}
谢谢!
【问题讨论】:
-
可以分享
getTableViewData方法的代码吗? -
@J.Koush 我发布了代码。基本上我使用 dispatchgroup 使用 Alamofire 获取数据。
标签: ios swift tableview uirefreshcontrol