Segue nicht immer die ausgewählte Zeile Anzahl
Leite ich Daten aus einer Tabelle view-controller, um eine detail-Ansicht. Ich habe versucht, mit indexPath.row
direkt in meine prepareForSegue
Methode, aber es zeigt einen Fehler an, der
Verwendung von ungelösten Bezeichner 'indexPath'
So, nach der Suche im web habe ich die variable indexOfSelectedPerson
zugewiesen ist, den Wert von indexPath.row
. Das problem wenn ich die app im simulator ist, dass prepareForSegue ist immer der erste Wert der indexOfSelectedPerson
(0), dann immer den Wert der ausgewählten Zeile erst, nachdem ich es auf. Also, wenn ich drücken Sie die zurück-Taste in den Simulator und wählen Sie eine andere Zeile in der detail-Ansicht zeigt die Informationen der Zeile habe ich das Vorherige mal.
import UIKit
class MasterTableViewController: UITableViewController {
var people = []
var indexOfSelectedPerson = 0
override func viewDidLoad() {
super.viewDidLoad()
people = ["Bob", "Doug", "Jill"]
}
override func numberOfSectionsInTableView(tableView: UITableView?) -> Int {
return 1
}
override func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int {
return people.count
}
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let cell = tableView!.dequeueReusableCellWithIdentifier("personCell", forIndexPath: indexPath) as UITableViewCell
cell.text = "\(people[indexPath.row])"
return cell
}
override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!)
{
indexOfSelectedPerson = indexPath.row
}
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if let mySegue = segue.identifier {
if mySegue == "personDetails" {
let detailsVC: DetailTableViewController = segue.destinationViewController as DetailTableViewController
detailsVC.selectedPersonName = "\(people[indexOfSelectedPerson])"
}
}
}
}
Also auswählen Doug, wenn die app das erste mal startet im simulator zeigt die details für Bob, weil indexPathOfSelectedPerson
0 ist. Schlagen Sie die zurück-Taste und dann die Auswahl Jill zeigt die details für Doug weil indexPathOfSelectedPerson
wurde 1 wenn ich klickte auf Doug der früheren Zeit. Ich vermute, das problem ergibt sich aus der Reihenfolge, in der die Methoden aufgerufen werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem besten Weg, das zu tun diese Art der Sache ist nicht die Verwendung der Delegaten.
UITableViewCell
etwa so:self.tableView.indexPathForCell(sender as! UITableViewCell)
Swift 3-update: