我有一个UITableView,最近我添加了一个刷新功能。
到目前为止,代码如下所示:
@IBOutlet var tview: UITableView!
var currentDate: NSDate = NSDate()
override func viewDidLoad(){
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: "refresh:", forControlEvents: .ValueChanged)
refreshControl.attributedTitle = NSAttributedString(string: "last updated on \(currentDate)")
tview.separatorStyle = UITableViewCellSeparatorStyle.None
tview.addSubview(refreshControl)
}
func refresh(refreshControl: UIRefreshControl) {
refreshControl.attributedTitle = NSAttributedString(string: "last updated on \(currentDate)")
fetchRequests()
}
如您所见,我在刷新控制函数内调用函数
fetchRequests()
,同时也在其中设置attributedTitle以向用户显示上次更新。我的函数
fetchRequests()
调用Web服务并异步获取数据:func fetchRequests(){
Alamofire.request(.GET, "https://mywebservice", parameters: ["username": username])
.responseJSON { response in
switch response.result {
case .Success:
self.items.removeAllObjects()
if let jsonData = response.result.value as? [[String: AnyObject]] {
for requestJSON in jsonData {
if let request = SingleRequest.fromJSON(JSON(requestJSON)){
self.items.addObject(request)
dispatch_async(dispatch_get_main_queue(),{
self.tview.reloadData()
self.refreshControl?.endRefreshing()
self.currentDate = NSDate()
})
}
}
}
//self.tview.reloadData()
case .Failure(let error):
print("SWITCH ERROR")
print(error)
}
}
}
并且我想在刷新完成后隐藏refreshControl。
这行:
self.refreshControl?.endRefreshing()
fetchRecords中
success
情况下的内容不起作用。如何从那里引用refreshControl并在成功的情况下结束它?另外,目前我在fetchRecords的最后注释了这一行://self.tview.reloadData()
因为我相信/希望重装发生在
dispatch_async
内部-这是一个很好的假设吗? 最佳答案
您在这里做错的是您的refreshControl对象是本地的,并且仅在viewDidLoad中可用,因此即使您在fetchRequest()中使用它也不起作用。将您的refreshControl对象传递给fetchRequests函数。尝试以下方法:
func refresh(refreshControl: UIRefreshControl) {
refreshControl.attributedTitle = NSAttributedString(string: "last updated on \(currentDate)")
fetchRequests(refreshControl)
}
func fetchRequest(refreshControl: UIRefreshControl) {
//existing code....
dispatch_async(dispatch_get_main_queue(),{
self.tview.reloadData()
refreshControl?.endRefreshing()
self.currentDate = NSDate()
})
}
如果将输入的fetchRequests函数移动到函数内部,则func refresh(refreshControl:UIRefreshControl)也将起作用。
关于ios - 仅在完成数据获取时(在Swift中),如何隐藏UIRefreshControl?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36114088/