【发布时间】:2016-03-20 13:09:05
【问题描述】:
我有一个 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(),我还在此处设置了属性标题以向用户显示上次更新的时间。
我的函数fetchRequests() 调用一个网络服务并异步获取数据:
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 内部 - 这是一个好的假设吗?
【问题讨论】:
标签: ios swift uitableview alamofire uirefreshcontrol