gpt4 book ai didi

ios - 如何仅在获取数据完成时隐藏我的 UIRefreshControl(在 Swift 中)?

转载 作者:行者123 更新时间:2023-11-29 01:08:03 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com