Ich bin ein Anfänger in Swift und erstelle eine grundlegende App, die eine UITableView enthält. Ich möchte eine bestimmte Zeile der Tabelle aktualisieren mit:
self.tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: UITableViewRowAnimation.none)
und ich möchte, dass die Zeile, die aktualisiert werden soll, aus einer Int namens rowNumber besteht
Das Problem ist, ich weiß nicht, wie ich das machen soll, und alle Threads, die ich gesucht habe, beziehen sich auf Obj-C
Irgendwelche Ideen?
Sie können eine NSIndexPath
mithilfe der Zeilen- und Abschnittsnummer erstellen und diese dann wie folgt neu laden:
let indexPath = NSIndexPath(forRow: rowNumber, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)
In diesem Beispiel habe ich angenommen, dass Ihre Tabelle nur einen Abschnitt enthält (d. H. 0). Sie können diesen Wert jedoch entsprechend ändern.
Update für Swift 3.0:
let indexPath = IndexPath(item: rowNumber, section: 0)
tableView.reloadRows(at: [indexPath], with: .top)
Für eine Soft-Impact-Animationslösung:
Swift 3:
let indexPath = IndexPath(item: row, section: 0)
tableView.reloadRows(at: [indexPath], with: .fade)
Swift 2.x:
let indexPath = NSIndexPath(forRow: row, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
Dies ist eine weitere Möglichkeit, die App vor dem Absturz zu schützen:
Swift 3:
let indexPath = IndexPath(item: row, section: 0)
if let visibleIndexPaths = tableView.indexPathsForVisibleRows?.index(of: indexPath as IndexPath) {
if visibleIndexPaths != NSNotFound {
tableView.reloadRows(at: [indexPath], with: .fade)
}
}
Swift 2.x:
let indexPath = NSIndexPath(forRow: row, inSection: 0)
if let visibleIndexPaths = tableView.indexPathsForVisibleRows?.indexOf(indexPath) {
if visibleIndexPaths != NSNotFound {
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
}
}
In Swift 3.0
let rowNumber: Int = 2
let sectionNumber: Int = 0
let indexPath = IndexPath(item: rowNumber, section: sectionNumber)
self.tableView.reloadRows(at: [indexPath], with: .automatic)
byDefault, wenn Sie nur einen Abschnitt in TableView haben, können Sie den Abschnittswert 0 setzen.
let indexPathRow:Int = 0
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)
Swift 4
let indexPathRow:Int = 0
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)
Wenn Sie section for tableview haben, sollten Sie nicht versuchen, alle Zeilen zu finden, die Sie aktualisieren möchten. Verwenden Sie dazu reload-Abschnitte. Es ist ein einfacher und ausgewogener Prozess:
yourTableView.reloadSections(IndexSet, with: UITableViewRowAnimation)
Schnell 4.2
func reloadYourRows(name: <anyname>) {
let row = <your array name>.index(of: <name passing in>)
let reloadPath = IndexPath(row: row!, section: 0)
tableView.reloadRows(at: [reloadPath], with: .middle)
}
Ich weiß, dass diese Frage für Swift gilt, aber hier ist der Xamarin-äquivalente Code der akzeptierten Antwort, wenn jemand interessiert ist.
var indexPath = NSIndexPath.FromRowSection(rowIndex, 0);
tableView.ReloadRows(new NSIndexPath[] { indexPath }, UITableViewRowAnimation.Top);
Swift 4.1
verwenden Sie es, wenn Sie eine Zeile mit selectedTag der Zeile löschen.
self.tableView.beginUpdates()
self.yourArray.remove(at: self.selectedTag)
print(self.allGroups)
let indexPath = NSIndexPath.init(row: self.selectedTag, section: 0)
self.tableView.deleteRows(at: [indexPath as IndexPath], with: .automatic)
self.tableView.endUpdates()
self.tableView.reloadRows(at: self.tableView.indexPathsForVisibleRows!, with: .automatic)
Wie wäre es mit:
self.tableView.reloadRowsAtIndexPaths([NSIndexPath(rowNumber)], withRowAnimation: UITableViewRowAnimation.Top)