UIButton dentro de UITableViewController
-
08-07-2019 - |
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?
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:
- Suponiendo que es una clase de celda personalizada, establezca una propiedad en la instancia de celda para identificar qué fila está mostrando y cuál puede usar su botón más tarde.
- Si coloca estos botones en las celdas como sus vistas accesorias, eche un vistazo a la tabla del delegado
tableView: accessoriesButtonTappedForRowWithIndexPath>.
. >- Si se trata de una tabla de una sección, podría hacer algo realmente cursi, como almacenar el índice de fila en la propiedad
tag
del botón. Su métodostartVote:
pasa el botón y luego puede extraer su etiqueta. - Si se trata de una tabla de una sección, podría hacer algo realmente cursi, como almacenar el índice de fila en la propiedad