Ich habe eine UITableView und vor kurzem habe ich eine Pull-to-Refresh-Funktion hinzugefügt.Wie kann ich mein UIRefreshControl nur ausblenden, wenn das Abrufen der Daten abgeschlossen ist (in Swift)?
Bisher sieht der Code wie folgt aus:
@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()
}
Wie man sehen kann ich eine Funktion fetchRequests()
in der Refresh-Steuerfunktion bin aufrufen, auch die attributedTitle da ich die Einstellung der Benutzer das letzte Mal zu zeigen, des Updates.
Meine Funktion fetchRequests()
eine Webservice aufruft und die Daten abruft asynchron:
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)
}
}
}
und ich möchte die refreshControl verstecken, wenn die Aktualisierung abgeschlossen ist.
Diese Zeile:
self.refreshControl?.endRefreshing()
innerhalb des success
Fall in fetchRecords funktioniert nicht. Wie kann ich von dort auf das refreshControl verweisen und es im Erfolgsfall beenden? Auch zur Zeit ich aus der Leitung am Ende der fetchRecords kommentiert:
//self.tview.reloadData()
, weil ich glaube/hoffe, dass Nachladen Platz innerhalb dispatch_async
nimmt - ist, dass eine gute Annahme?
aber ist das nicht, was ich jetzt mache, wenn ich 'self.refreshControl? .endRefreshing()' innerhalb von 'dispatch_async (dispatch_get_main_queue(), {'? Denn wenn ja, dann funktioniert es leider nicht. .. – randomuser1