self.tableView.indexPathForSelectedRow
devuelve la celda seleccionada, pero no la celda del remitente, por ejemplo, la celda del remitente no está seleccionada (acción accesoria), o en caso de selección múltiple. La mejor manera es obtener indexPath para segue sender:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
__auto_type itemViewController = (id<ItemViewController>)segue.destinationViewController;
itemViewController.senderIndexPath = [self.tableView indexPathForCell:sender];
}
En Swift:
protocol ItemViewController {
var senderIndexPath : IndexPath? { get set }
var selectedIndexPaths : [IndexPath]? { get set }
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let cell = sender as? UITableViewCell,
var itemViewController = segue.destination as? ItemViewController {
itemViewController.senderIndexPath = tableView.indexPath(for: cell)
itemViewController.selectedIndexPaths = tableView.indexPathsForSelectedRows
}
}