2017-05-28 4 views
0

Ich habe eine Tabelle Anzeigen, dass Remote-Daten aus dem Backend abrufen, die alles funktioniert, was ich versuche zu erreichen ist, wenn Benutzer auf eine Zelle klicken, um zu anderen ViewController (Details Controller) zu navigieren und wenn die Zurück-Taste gedrückt wird, sollte die Tabellenansicht zu der ausgewählten Zelle rollen und nicht nach oben gehen. Ich habe versucht tableView.scrollToRow wie unten gezeigt, aber es funktioniert nicht? Ich weiß, dass ich tableView.reloadData() in meinem Laden von Daten bin Aufruf funktionieren andere weise es nichtUITableView zur ausgewählten Zelle nach der Navigation scrollen

class feeds: UITableViewController { 
    var data = [AnyObject]() 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     LoadData() 
    } 


    override func numberOfSections(in tableView: UITableView) -> Int { 

     return 1 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     return data.count 
    } 


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) 

     // configur tabl cell 

     return cell 
    } 

    func LoadData(){ 

    // Fetch Feeds to dataArray 
     // Reload UITable View 
     self.tableView.reloadData() 
     let celloffset = UserDefaults.standard.integer(forKey: "celloffset") 
     if celloffset != 0{ 
     let index = IndexPath(item: celloffset, section: 0) 
     self.tableView.scrollToRow(at: index, at: UITableViewScrollPosition.middle, animated: false) 
     } 
    } 


    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     UserDefaults.standard.set(indexPath.row, forKey: "celloffset") 

     // Navigate to Details VC 
    } 

} 

Jede Hilfe oder Ideen viel wird geladen wird geschätzt

Antwort

1

viewDidLoad nur einmal bei View-Controller-Initialisierung aufgerufen wird, nicht wenn die Controller auf dem Navigations-Stack angezeigt werden. Rufen Sie LoadData() in viewDidLayoutSubviews

override func viewDidLayoutSubviews() { 
    LoadData() 
} 
+0

Dank für Ihre Antwort, aber ich bin unten Fehler ' 'NSRangeException', Grund bekommen:‚- [UITableView _contentOffsetForScrollingToRowAtIndexPath: atScrollPosition:]: Zeile (7) über Grenzen (5) zum Abschnitt (0) .'' –

+0

Sie versuchen, zu einer Zeile zu blättern, die nicht existiert. –

+0

Ich weiß, was es bedeutet, mein Array hat 25 Zeilen nach dem Laden Ich wählte Zelle Nr. 7, wenn Sie zurück drücken, der Fehler ist aufgetreten ich denke, es ist, weil die Daten neu geladen werden! –

1

Wenn Sie zurück zur ursprünglichen Ansicht Controller kommen, dann brauchen Sie keine Daten wieder zu holen. Verwenden Sie einfach ViewWillAppear Methode. Holen Sie sich die celloffset und blättern Sie Tabellenansicht.

let celloffset = UserDefaults.standard.integer(forKey: "celloffset") 
if celloffset != 0{ 
let index = IndexPath(item: celloffset, section: 0) 
self.tableView.scrollToRow(at: index, at: UITableViewScrollPosition.middle, animated: false)} 
+0

Danke für Ihre Antwort, aber könnte mehr erklären, wie man die Daten nicht wieder lädt, wenn zurück zur Tabellenansicht? Ich speichere die Daten in einem Array und wenn ich zurück zur Tabellenansicht komme, wird dieses Array neu erstellt, so dass ich die Daten neu laden muss –

Verwandte Themen