¿Cómo se agrega una acción a un botón mediante programación en xcode?


105

Sé cómo agregar una IBAction a un botón arrastrándolo desde el generador de interfaz, pero quiero agregar la acción mediante programación para ahorrar tiempo y evitar cambiar de un lado a otro constantemente. La solución es probablemente muy simple, pero parece que no puedo encontrar ninguna respuesta cuando la busco. ¡Gracias!

Respuestas:


222

Prueba esto:

Rápido 4

myButton.addTarget(self,
                   action: #selector(myAction),
                   for: .touchUpInside)

C objetivo

[myButton addTarget:self 
             action:@selector(myAction) 
   forControlEvents:UIControlEventTouchUpInside];

Puede encontrar una rica fuente de información en la Documentación de Apple. Eche un vistazo a la documentación de UIButton , revelará que UIButton es un descendiente de UIControl, que implementa el método para agregar objetivos .

-

Deberá prestar atención a si agregar dos puntos o no después de myActionen action:@selector(myAction)

Aquí está la referencia .


¿Qué sucede si quiero pasar un parámetro al selector cuando se presiona mi botón (por ejemplo, tengo un botón dentro de una UITableViewCell y quiero pasar el objeto en esa celda cuando se presiona el botón de la celda)?
acecapadas el

1
@acecapades Creo que estás mezclando dos cosas. No puede adjuntar un parámetro como lo haría con performSelector. El patrón de acción utilizado por el UIButton descendiente de UIControl es notificar a algún objetivo con un selector determinado cuando se activa controlEvent. Cuando esto suceda en su caso, podría subir las supervistas para ver quién encapsula su botón y pedir un método para resolver la relación entre la celda de tabla y el modelo y luego hacer lo que quiera con eso.
Nick Weaver

1
Veo. Eso tiene sentido. Creo que entiendo lo que estás diciendo. ¡Gracias por el consejo, Nick!
acecapada

¿Alguien puede traducir esto en rápido?

23

Respuesta rápida:

myButton.addTarget(self, action: "click:", for: .touchUpInside)

func click(sender: UIButton) {
    print("click")
}

Documentación: https://developer.apple.com/documentation/uikit/uicontrol/1618259-addtarget


¿Para qué sirve el ":" después del "clic" en la llamada a UIControl.addTarget?
dumbledad

1
Los selectores tienen :como marcadores de posición para los argumentos de función. Dado que clicktoma el senderargumento, se reemplaza con a :en la cadena de selección.
Etan

Esto funcionó recientemente para mí para Swift 3. button.addTarget (self, action: #selector (ViewController.click), for: UIControlEvents.touchUpInside) func click () {print ("click")} Gracias @Glauco Neves por señalarnos por el camino correcto
uplearnedu.com

14
CGRect buttonFrame = CGRectMake( 10, 80, 100, 30 );
        UIButton *button = [[UIButton alloc] initWithFrame: buttonFrame];
        [button setTitle: @"My Button" forState: UIControlStateNormal];
        [button addTarget:self action:@selector(btnSelected:) forControlEvents:UIControlEventTouchUpInside];
        [button setTitleColor: [UIColor redColor] forState: UIControlStateNormal];
[view addSubview:button];

¿Es posible agregar 2 o más acciones?
ErasmoOliveira

9

prueba esto:

primero escribe esto en tu archivo .h de viewcontroller

UIButton *btn;

Ahora escriba esto en su archivo .m de viewcontrollers viewDidLoad.

btn=[[UIButton alloc]initWithFrame:CGRectMake(50, 20, 30, 30)];
[btn setBackgroundColor:[UIColor orangeColor]];
//adding action programatically
[btn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];

escriba este método viewDidLoad externo en el archivo .m de su controlador de vista

- (IBAction)btnClicked:(id)sender
{
   //Write a code you want to execute on buttons click event
}

8
 CGRect buttonFrame = CGRectMake( x-pos, y-pos, width, height );   //
 CGRectMake(10,5,10,10) 

 UIButton *button = [[UIButton alloc] initWithFrame: buttonFrame];

 button setTitle: @"My Button" forState: UIControlStateNormal];

 [button addTarget:self action:@selector(btnClicked:) 
 forControlEvents:UIControlEventTouchUpInside];

 [button setTitleColor: [UIColor BlueVolor] forState:
 UIControlStateNormal];

 [view addSubview:button];




 -(void)btnClicked {
    // your code }

6

Para Swift 3

Primero cree una función para la acción del botón y luego agregue la función al objetivo de su botón

func buttonAction(sender: UIButton!) {
    print("Button tapped")
}

button.addTarget(self, action: #selector(buttonAction),for: .touchUpInside)

3
UIButton *btnNotification=[UIButton buttonWithType:UIButtonTypeCustom];
btnNotification.frame=CGRectMake(130,80,120,40);
btnNotification.backgroundColor=[UIColor greenColor];
[btnNotification setTitle:@"create Notification" forState:UIControlStateNormal];
[btnNotification addTarget:self action:@selector(btnClicked) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnNotification];


}

-(void)btnClicked
{
    // Here You can write functionality 

}

proporcione algunos comentarios que expliquen cómo puede ayudar su muestra.
Nogard

UIButton * btnNotification = [UIButton buttonWithType: UIButtonTypeCustom]; btnNotification.frame = CGRectMake (130,80,120,40); // Configuración del marco del botón btnNotification.backgroundColor = [UIColor greenColor]; [btnNotification setTitle: @ "create Notification" forState: UIControlStateNormal]; // Establecer el título para el botón [btnNotification addTarget: self action: @selector (btnClicked) forControlEvents: UIControlEventTouchUpInside]; // añadir Target For button [self.view addTarget: self action: @selector (btnClicked) forControlEvents: UIControlEventTouchUpInside]; // agregar Target For button [self.view addTarget: self action: @selector (btnClicked) forControlEvents: UIControlEventTouchUpInside]; btnNotification];} - (void) btnClicked {// Aquí puede escribir la funcionalidad}
user2677311

- (void) btnClicked {// aquí, lo que quieras, puedes configurar la acción para el botón // Ejemplo: ir al siguiente controlador de vista nextviewController * nextPage = [nextviewController alloc] init]; [self.navigationController pushviewcontroller: nextPage animada: SÍ]; }
user2677311

2

UIButtonhereda de UIControl. Eso tiene todos los métodos para agregar / eliminar acciones: Referencia de clase UIControl . Mire la sección "Preparación y envío de mensajes de acción", que cubre – sendAction:to:forEvent:y – addTarget:action:forControlEvents:.


1
 UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self 
       action:@selector(aMethod1:)
forControlEvents:UIControlEventTouchUpInside];
[button setTitle:@"Show View" forState:UIControlStateNormal];
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
[view addSubview:button];   
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.