2012-02-18 24 views
9

Estoy intentando usar un storyboard/segue para manejar la transición entre una UITableView con transición estándar y botón de divulgación de detalles. Después de leer algunos puestos diferentes de aquí, me he levantado mi proyecto de esta manera:IndexPath para segue from accessoryButton

  1. lazo segue principal entre UITableViewCell y ViewController
  2. lazo segue secundaria de ViewController padres a la nueva ViewController
  3. Implementar accessoryButtonTappedForRowWithIndexPath de la siguiente :

    -(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { 
        [self performSegueWithIdentifier:@"DetailSegue" sender:self]; 
    } 
    

Esto funciona muy bien y mi prepareForSegue: sender: obtiene c alled como se esperaba El problema es que necesito conocer indexPath para el elemento seleccionado. El segue de la UITableViewCell recupera la indexPath así:

NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 

Desafortunadamente cuando trato de hacer eso después de haber llamado el accessoryButton, que devuelve null.

La pregunta original estoy basando parte de este código fuera de aquí es: Detail Disclosure Button and Segues

¿Hay un método de la tableView que devuelve indexPath para accessoryButtons? ¿Debo acceder al indexPath de alguna otra manera?

Respuesta

16

Usted no tiene que anular accessoryButtonTappedForRowWithIndexPath.

En prepareForSegue, cuando se trabaja con un botón de detalle divulgación, en lugar de:

[self.tableView indexPathForSelectedRow] 

uso:

[self.tableView indexPathForCell:sender] 

El remitente ya es la celda del botón divulgación detalle.

+2

Gracias Adam, ¡esta debería ser la respuesta aceptada! – Pat

+0

Cuando hice esto, el remitente era el TableViewController en el que estaba. Entonces en performSegue, pasé la celda como el remitente –

+0

¿cómo hacemos esto en Swift 3? – nyxee

13

sender El argumento es, de acuerdo con la documentación:

El objeto que desea utilizar para iniciar el segue. Este objeto está disponible para fines informativos durante la transición real.

No veo ninguna razón por la que no se puede utilizar la ruta del índice como remitente en lugar de self, a continuación, acceder a la ruta de índice en prepareForSegue:.

Si eso no funciona, almacenar la ruta del índice en una Ivar y acceder a que, en prepareForSegue

+0

Pasando el indexPath como el remitente funciona bien. Parece bastante obvio una vez que alguien lo menciona. Gracias. – valdarin

+0

Excelente idea, me molestó pensar que podríamos necesitar una variable local solo para pasar esta información a través de – trapper