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.view
estar solosender
aquí? 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
tag
propiedad para almacenar la fila de la celda como:Y luego puede acceder a él ya que
sender
es la misma celda con el valor de la fila en su etiqueta:fuente
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:En Swift:
fuente
Si lo usa
prepareForSegue:
, puede verificar quién es el remitente y ejecutar un código diferentePor ejemplo en Swift
fuente