作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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()
,同时我还在那里设置了 attributeTitle 以向用户显示上次更新的时间。
我的函数 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() 中使用它也不会工作。将您的刷新控制对象传递给 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 刷新(refreshControl:UIRefreshControl)中也将起作用。
关于ios - 如何仅在获取数据完成时隐藏我的 UIRefreshControl(在 Swift 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36114088/
我是一名优秀的程序员,十分优秀!