Reload tableView Abschnitt ohne Kopfzeile neu laden - Swift
Ich versuche neu zu laden tableView Abschnitt statt Neuladen der gesamten tableview, denn ich habe ein textfield in dem header-Abschnitt und wenn ich rufe self.tableView.reloadData()
meine Tastatur gesperrt.
Ich habe versucht den code unten, aber ich bekomme diese Fehlermeldung Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to delete row 5 from section 2 which only contains 4 rows before the update'
Also bitte, wo wäre dann mein Problem?
let newCount = self.placeArray.count
var newIndexPaths = NSMutableArray(capacity: newCount)
for var i = 0 ; i < newCount ; i++ {
var indexPath = NSIndexPath(forRow: i, inSection: 2)
newIndexPaths.addObject(indexPath)
}
self.tableView.beginUpdates()
self.tableView.reloadRowsAtIndexPaths(newIndexPaths as [AnyObject], withRowAnimation: UITableViewRowAnimation.None)
self.tableView.endUpdates()
InformationsquelleAutor der Frage CAN | 2015-09-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie
UITableView
'sreloadSections
Methode statt.InformationsquelleAutor der Antwort hennes
Swift 3.0.1:
InformationsquelleAutor der Antwort Danut Pralea
Swift Xcode 3.1 8.3.3 Antwort 🙂
Den problem ist - jeder Abschnitt enthält header-natürlich, so Abschnitt:
Abschnitt = header + footer + Zeilen
Den Antwort ist - reload Zeilen direkt von IndexPath.
Beispiel:
Sagen wir mal du hast 1 Abschnitt in Ihrer Tabelle und 'array' von etwas, das Sie als Datenquelle für die Tabelle:
let indexes = (0..<array.count).map { IndexPath(row: $0, section: 0) }
Nun, wir haben array der Indizes der Zelle, die wir laden wollen, also:
tableView.reloadRows(at: indexes, with: .fade)
InformationsquelleAutor der Antwort Gennadii Tsypenko
Ich weiß nicht, warum die falschen Antworten bekommen, so viele upvotes.
Hinweis:
UITableView.reloadData()
werden alle neu laden der Tabelle. Docs über reloaddataUITableView.reloadSections(_ sections: IndexSet, with animation: UITableViewRowAnimation)
wird reload-spezifischen Abschnitt( einschließlich der header-Abschnitt und den Abschnitt Fußzeile). Docs über reloadsectionsUITableView.reloadRows(at indexPaths: [IndexPath], with animation: UITableViewRowAnimation)
lädt dann die angegebenen Zeilen. Docs über reloadRowsSo, hier
reloadSections
wird nicht hier arbeitet. Wenn Sie Ihre header-Abschnitt der Daten und den status nicht ändern, rufen Sie diese Methode machen keine Unterschiede von den Augen.Lösung: verwenden
reloadRows
zum laden der Zeilen aller Teile oder des spezifischen Abschnitt. Hinweis: hier können Sie einfach laden Sie die sichtbaren Zeilen, andere werden geladen, wenn Sie scrollen Sie die Ansicht. Sie können auch finden Holen Sie sich alle indexPaths in einem Abschnitt weitere LösungenInformationsquelleAutor der Antwort Kris Roofe