it-swarm.com.de

Aktualisieren Sie bestimmte Zeilen von UITableView basierend auf Int in Swift

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?

65
BobRon

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)
159
Lyndsey Scott

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)
   }
}
19

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.

2
jaiswal Rajan
let indexPathRow:Int = 0
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)
2
Sachin Rasane

Swift 4

let indexPathRow:Int = 0    
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)
1
Neha

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)
0

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)
    }
0
Legend_ 33

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);
0
wildbagel

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)
0
Rana Ali Waseem

Wie wäre es mit:

self.tableView.reloadRowsAtIndexPaths([NSIndexPath(rowNumber)], withRowAnimation: UITableViewRowAnimation.Top)
0
skyline75489