2012-05-23 5 views
8

Ich habe eine Tabelle mit n Abschnitten. Jeder Abschnitt enthält eine Zeile. Wie erstellt man den Indexpfad für die Tabelle? Es ist ein Verfahren, das Indexpfad für alle sichtbaren Zeilen erstellen kann [self.tableView indexPathsForVisibleRows] Ich brauche etwas ähnliches wie indexPathsForAllRowsWie erstellt man Indexpfade für alle Zeilen und alle Abschnitte von uitableview?

Ich brauche das alles nur die Daten in der Tabelle zu aktualisieren, weil Methode [self.tableView reloadData]; aktualisieren alle die Tabelle mit Kopf- und Fußzeilen . Deshalb muss ich verwenden reloadRowsAtIndexPaths

+0

Warum brauchen Sie alle Zeilen? –

+0

Ich habe die Frage aktualisiert – Alex

+1

Warum müssen Sie Off-Screen-Zeilen aktualisieren? Sie werden in cellForRowAtIndexPath aktualisiert: Solange Ihr Modell aktualisiert wird –

Antwort

10

Sie müssen alle die Zeilen nicht neu laden. Sie müssen nur die sichtbaren Zellen neu laden (deshalb existiert indexPathsForVisibleRows).

Die Zellen außerhalb des Bildschirms erhalten ihre neuen Daten in cellForRowAtIndexPath:, sobald sie sichtbar werden. Hier

+0

Ich habe nie gedacht, auf diese Weise indexPathForVisibleRows zu verwenden. – Mark

3

ist die Lösung in Swift 3

func getAllIndexPaths() -> [IndexPath] { 
    var indexPaths: [IndexPath] = [] 

    // Assuming that tableView is your self.tableView defined somewhere 
    for i in 0..<tableView.numberOfSections { 
     for j in 0..<tableView.numberOfRows(inSection: i) { 
      indexPaths.append(IndexPath(row: j, section: i)) 
     } 
    } 
    return indexPaths 
} 
3

ich eine UITableView Erweiterung gemacht basierend auf @Vakas Antwort. Auch die Abschnitte und Zeilen für > 0 zu prüfen Abstürze für leere UITableView s zu verhindern:

extension UITableView{ 
    func getAllIndexes() -> [NSIndexPath] { 
     var indices = [NSIndexPath]() 
     let sections = self.numberOfSections 
     if sections > 0{ 
      for s in 0...sections - 1 { 
       let rows = self.numberOfRowsInSection(s) 
       if rows > 0{ 
        for r in 0...rows - 1{ 
         let index = NSIndexPath(forRow: r, inSection: s) 
         indices.append(index) 
        } 
       } 
      } 
     } 
     return indices 
    } 
}