Si utiliza prepareForSegue:sender: , no tendrá mucho que cambiar si luego decide activar la transición desde algún control fuera de la vista de tabla.
El prepareForSegue:sender:mensaje se envía al controlador de vista actual, por lo que sugeriría algo como esto:
- (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];
}
En Swift:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let path = self.tableView.indexPathForSelectedRow()!
segue.destinationViewController.detail = self.detailForIndexPath(path)
}
self.viewestar solosenderaquí? Ni siquiera podía ir[self.view indexPathForSelectedRow]al trabajo, tenía que hacerlo[sender indexPathForSelectedRow];tableView.indexPathForSelectedRow()contenga el valor correcto cuandoprepareFroSegue...se llama:tableView(_:didSelectrowAtIndexPath:)no se llama hasta más tarde.Hice esto y funcionó
fuente
Cuando el remitente es UITableViewCell, puede pedirle a UITableView que consulte indexPath de la celda.
fuente
si su propiedad tableView está en otra clase y solo tiene una sección , entonces podría usar la
tagpropiedad para almacenar la fila de la celda como:Y luego puede acceder a él ya que
senderes la misma celda con el valor de la fila en su etiqueta:fuente
self.tableView.indexPathForSelectedRowdevuelve 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:En Swift:
fuente
Si lo usa
prepareForSegue:, puede verificar quién es el remitente y ejecutar un código diferentePor ejemplo en Swift
fuente