Pregunta

Say por ejemplo I tiene un IBAction que es hasta enganchado a un UIButton en constructor de interfaz.

- (IBAction)functionToBeCalled:(id)sender
{
   // do something here   

}

Con-en mi código, digamos por ejemplo, en otro método, ¿cuál es la mejor manera de llamar a ese IBAction

Si trato de llamarlo así, recibo un error:

[self functionToBeCalled:];

Pero, si trato de llamarlo así (haciendo trampa un poco, creo), que funciona bien:

[self functionToBeCalled:0];

¿Cuál es la forma correcta de llamar correctamente?

¿Fue útil?

Solución

La forma correcta es o bien:

- [self functionToBeCalled:nil] 

Para pasar un remitente nulo, lo que indica que no se llamaba a través del marco habitual.

o

- [self functionToBeCalled:self]

Para pasar a sí mismo como el remitente, que también es correcta.

La que se eligió depende de lo que hace exactamente la función, y lo que se espera que el emisor sea.

Otros consejos

semánticamente hablando, llamando a un IBAction debe ser activado por eventos de interfaz de usuario única (por ejemplo, un botón TAP). Si necesita ejecutar el mismo código desde múltiples lugares, entonces se puede extraer que el código de la IBAction en un método específico, y llamar a ese método de ambos lugares:

- (IBAction)onButtonTap:(id)sender {
    [self doSomething];
}

Esto le permite hacer la lógica adicional basado en el remitente (tal vez es posible asignar la misma acción a varios botones y decidir qué hacer en función del parámetro sender). Y también reduce la cantidad de código que tiene que escribir en el IBAction (que mantiene su implementación del controlador limpia).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top