Jeśli używasz prepareForSegue:sender:
, nie będziesz musiał tak wiele zmienić, jeśli później zdecydujesz się wyzwolić płynność z jakiejś kontrolki poza widokiem tabeli.
prepareForSegue:sender:
Wiadomość zostanie wysłana do bieżącego kontrolera widoku, więc sugeruję coś takiego:
- (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];
}
W Swift:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let path = self.tableView.indexPathForSelectedRow()!
segue.destinationViewController.detail = self.detailForIndexPath(path)
}
self.view
po prostusender
tu być ? Nie mogłem nawet dostać się[self.view indexPathForSelectedRow]
do pracy, musiałem to zrobić[sender indexPathForSelectedRow];
tableView.indexPathForSelectedRow()
zawiera poprawną wartość, gdyprepareFroSegue...
jest wywoływana:tableView(_:didSelectrowAtIndexPath:)
jest wywoływana dopiero później.Zrobiłem to i zadziałało
źródło
Gdy nadawcą jest UITableViewCell, możesz poprosić UITableView o zapytanie o wartość indexPath komórki.
źródło
jeśli twoja właściwość tableView należy do innej klasy i masz tylko jedną sekcję , możesz użyć tej
tag
właściwości do przechowywania wiersza komórki, na przykład:Następnie możesz uzyskać do niego dostęp, ponieważ
sender
jest to ta sama komórka z wartością wiersza w swoim tagu:źródło
self.tableView.indexPathForSelectedRow
zwraca wybraną komórkę, ale nie łączy komórki nadawcy, np. komórka nadawcy nie jest wybrana (akcja pomocnicza) lub w przypadku wielokrotnego wyboru. Najlepszym sposobem jest pobranie indexPath dla nadawcy segue:W Swift:
źródło
Jeśli używasz
prepareForSegue:
, możesz sprawdzić, kto jest nadawcą i wykonać inny kodNa przykład w swift
źródło