2011-06-05 13 views
8

¿Cómo puedo pasar un argumento en el @selector para mi código a continuación?¿Cómo pasar argumentos en @selector?

[thisIconBtn addTarget:self action:@selector(changeIconState) forControlEvents:UIControlEventTouchUpInside]; 

-(void)changeIconState:(UITableViewCell*)thisCell 
{ 
    //do something 
} 
+0

Hay una manera en que puede llamar a un selector con múltiples argumentos, y esta pregunta ya fue respondida ... puede leerla [aquí] (http://stackoverflow.com/questions/1018195/objective-c-calling- selectores-con-argumentos-múltiples) – iruleonu

Respuesta

6

En primer lugar, los dos puntos forman parte del selector: @selector(changeIconState:).

En segundo lugar, las acciones son métodos que toman un conjunto particular de parámetros; no se puede usar simplemente cualquier método como acción. Por lo general, las acciones se ven así:

- (void)myAction:(id)sender; 

donde el remitente es un puntero al objeto que está enviando la acción. En su código, cuando se toca thisIconButton, ese botón se pasará como el remitente.

+0

Tengo un botón en cada celda. ¿Cómo puedo hacer esto? – Zhen

+0

Depende de cómo configure las cosas. Puede examinar la supervista del botón para descubrir en qué celda se encuentra. O bien, puede hacer que el botón apunte a la celda en lugar de al controlador de vista. La acción de la célula podría llamar a su método '-changeIconState:'. – Caleb

1

si desea que la célula a la que pertenece el botón, lo consigue utilizando button.superview.superview pero no creo que se pueda alterar los argumentos de los métodos de control de destino de los eventos.

0

Una de las razones más comunes para intentar enviar datos a través de un selector es cuando utiliza un botón personalizado en una UITableViewCell.

Matthias Bauch proporcionó una excelente muestra de código sobre cómo obtener indexPath buscando la celda en el remitente en una publicación relacionada. Ver https://stackoverflow.com/a/5690329/654870.

Cuestiones relacionadas