buttons ios iphone cocoa-touch interface-builder ibaction

ios - buttons - swift button action



¿Cuál es la mejor manera de llamar a un IBAction desde dentro del código? (2)

Digamos, por ejemplo, que tengo una IBAction que está conectada a un UIButton en el constructor de interfaces.

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

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

Si trato de llamarlo así, recibo un error:

[self functionToBeCalled:];

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

[self functionToBeCalled:0];

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


Hablando semánticamente, la llamada a una IBAction debe ser activada solo por eventos de la interfaz de usuario (por ejemplo, un toque de botón). Si necesita ejecutar el mismo código desde varios lugares, puede extraer ese código de IBAction en un método dedicado y llamar a ese método desde ambos lugares:

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

Esto le permite realizar una lógica adicional basada en el remitente (quizás podría asignar la misma acción a varios botones y decidir qué hacer en función del parámetro del sender ). Y también reduce la cantidad de código que necesita escribir en IBAction (que mantiene limpia la implementación de su controlador).


La forma correcta es:

- [self functionToBeCalled:nil]

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

O

- [self functionToBeCalled:self]

Pasarse como remitente, lo que también es correcto.

Cuál elegir depende de lo que hace exactamente la función y de lo que espera que sea el remitente.