Pregunta

Tengo un UIButton que se crea dentro de cada celda de la tabla. Quiero conectar un evento táctil así:

[imageButton addTarget:self
                action:@selector(startVote:)
      forControlEvents:UIControlEventTouchUpInside];

Quiero pasar datos sobre la fila actual (la identificación del objeto para esa fila) al método startVote. ¿Hay algún método que me falta para hacer esto o estoy rompiendo alguna práctica recomendada? ¿Esto parece una cosa muy normal que hacer?

¿Fue útil?

Solución

Supongo que tiene algún tipo de NSArray con los datos que se pasan a los botones en cellForRowAtIndexPath .

Pruebe esto en startVote :

- (void)startVote:(id)sender {
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    NSDictionary *myData = [myArray objectAtIndex:indexPath.row];
}

EDITAR:

Si por alguna razón la fila no está seleccionada, puede asignar una única etiqueta a cada botón luego de la creación y luego:

- (void)startVote:(id)sender {
    int myTag = [(UIButton *)sender tag];
    NSDictionary *myData = [myArray objectAtIndex:myTag];
}

Tal vez haría algún tipo de operación con la etiqueta para que pueda usarse como índice (agrego una cierta cantidad a cada etiqueta para que no entre en conflicto con etiquetado "automático" utilizado por el sistema operativo.

Otros consejos

El UITableViewCell no sabe, fuera de la caja, qué fila se muestra en la tabla. Recuerde, la intención es que las mismas instancias de celda se reutilicen en toda la tabla para mostrar sus datos. Dicho esto, su UITableViewController es responsable de configurar las celdas y pasarlas al sistema (y tiene la ruta del índice, por supuesto). En ese momento, podría hacer algo como:

scroll top