Wenn Sie verwenden, müssen prepareForSegue:sender:
Sie nicht so viel ändern, wenn Sie später entscheiden, den Übergang von einem Steuerelement außerhalb der Tabellenansicht aus auszulösen.
Die prepareForSegue:sender:
Nachricht wird an den aktuellen Ansichts-Controller gesendet, daher würde ich Folgendes vorschlagen:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Assume self.view is the table view
NSIndexPath *path = [self.tableView indexPathForSelectedRow];
DetailObject *detail = [self detailForIndexPath:path];
[segue.destinationViewController setDetail:detail];
}
In Swift:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let path = self.tableView.indexPathForSelectedRow()!
segue.destinationViewController.detail = self.detailForIndexPath(path)
}
self.view
einfachsender
hier sein? Ich konnte nicht einmal[self.view indexPathForSelectedRow]
zur Arbeit, ich musste tun[sender indexPathForSelectedRow];
tableView.indexPathForSelectedRow()
Aufrufen der richtige Wert enthaltenprepareFroSegue...
ist:tableView(_:didSelectrowAtIndexPath:)
Wird erst später aufgerufen.Ich habe das gemacht und es hat funktioniert
quelle
Wenn der Absender UITableViewCell ist, können Sie UITableView auffordern, den Indexpfad der Zelle abzufragen.
quelle
Wenn sich Ihre tableView-Eigenschaft in einer anderen Klasse befindet und Sie nur einen Abschnitt haben , können Sie die
tag
Eigenschaft verwenden, um die Zeile der Zelle wie folgt zu speichern:Und dann können Sie darauf zugreifen, da
sender
es sich um dieselbe Zelle mit dem Zeilenwert in ihrem Tag handelt:quelle
self.tableView.indexPathForSelectedRow
Gibt die ausgewählte Zelle zurück, aber nicht die Absenderzelle, z. B. ist die Absenderzelle nicht ausgewählt (Zusatzaktion) oder in einem Fall mit Mehrfachauswahl. Der beste Weg ist, indexPath für den Absender zu erhalten:In Swift:
quelle
Wenn Sie verwenden
prepareForSegue:
, können Sie überprüfen, wer der Absender ist, und anderen Code ausführenZum Beispiel in schnell
quelle