2016-07-12 18 views
-1

Ich fange an, mit UITableViews zu arbeiten und kann nicht herausfinden, wie man die Position einer Zelle mit Code ändert. Das Ändern der Position im Storyboard ist einfach genug, aber ich muss es in swift machen können.Index einer Zelle ändern

+0

Ich nehme an, Sie sprechen über die Änderung der Index/Reihenfolge der Zelle in der Tabellenansicht. Sie müssen die Reihenfolge der Daten der Zelle in der Datenquelle der Tabellenansicht ändern und dann 'tableview.reloadData() 'aufrufen. –

Antwort

0

TLDR;

  1. Aktualisieren Sie Ihre Daten. d.h. swap(&arr[2], &arr[3]).
  2. Rufen Sie die Methode reloadData() von tableView auf, um die Änderungen an Ihren Daten widerzuspiegeln.

Lange Antwort

Eine Instanz UITableView Werke durch seine Datenquelle (UITableViewDataSource) für die Informationen überprüft die es braucht. Dies umfasst die Anzahl der Abschnitte und Zeilen sowie die Instanz UITableViewCell, die die Tabellenansicht verwenden soll. Diese werden durch die folgenden UITableViewDataSource Delegatmethoden definiert:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int; 
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int; 
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell; 

Normalerweise würden Sie die ersten beiden auf einige Daten stützen Sie haben, wahrscheinlich einem Array oder einem ähnlichen Behälter. - Zum Beispiel, wenn Ihre Tableview angezeigt Daten aus einem Array namens fruitArray (die Namen der verschiedenen Früchte enthalten eine Liste von Strings), dann könnten Sie so etwas wie die folgenden haben:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    // Our array is one dimensional, so only need one section. 
    // If you have an array of arrays for example, you could set this using the number of elements of your child arrays 
    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // Number of fruits in our array 
    return fruitArray.count 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("yourCellId") // Set this in Interface Builder 
    cell.textLabel?.text = fruitArray[indexPath.row] 
    return cell 
} 

Dann können Sie sehen, dass die Antwort auf Ihre Frage wird einfach! Da der Inhalt einer bestimmten Zelle auf fruitArray basiert, müssen Sie lediglich Ihr Array aktualisieren. Aber wie bringt man die TableView dazu, ihre dataSource "zu überprüfen"? Nun, Sie verwenden, um die reloadData Methode, etwa so:

swap(&fruitArray[2], &fruitArray[3]) 
tableView.reloadData() 

Dies ist dann die Tableview lösen zu „prüfen“ seine Datasource, damit Ihre Daten Swap verursacht auf dem Bildschirm erscheinen!

Wenn Sie den Benutzer möchten in der Lage sein, die Positionen der Zellen zu tauschen, können Sie die folgende UITableViewDelegate verwenden (nicht UITableViewDataSource) Delegatmethode:

override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool 

Werfen Sie einen Blick auf this article für Mehr Info. Sie können auch die Dokumentation von Apple unter UITableView, UITableViewDataSource und UITableViewDelegate für weitere Details anzeigen.

Hoffe, das hilft!

+0

Vielen Dank Jason, das war extrem gründlich und hilfreich! –

+0

Bitte als akzeptierte Antwort markieren, wenn Sie glauben, dass dies Ihre Frage beantwortet hat. Vielen Dank! – Jason

Verwandte Themen