Comment ajouter une action à un bouton par programmation dans xcode


105

Je sais comment ajouter une IBAction à un bouton en le faisant glisser depuis le générateur d'interface, mais je souhaite ajouter l'action par programme pour gagner du temps et éviter de basculer constamment. La solution est probablement très simple, mais je n'arrive tout simplement pas à trouver de réponses lorsque je la recherche. Je vous remercie!

Réponses:


222

Essaye ça:

Swift 4

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

Objectif c

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

Vous pouvez trouver une riche source d'informations dans la documentation Apple. Jetez un œil à la documentation d'UIButton , elle révélera qu'UIButton est un descendant d' UIControl, qui implémente la méthode pour ajouter des cibles .

-

Vous devrez faire attention à ajouter ou non deux-points après myActiondans action:@selector(myAction)

Voici la référence .


Que faire si je veux passer un paramètre au sélecteur lorsque mon bouton est enfoncé (par exemple, j'ai un bouton dans un UITableViewCell et je veux passer l'objet dans cette cellule lorsque le bouton de la cellule est enfoncé)?
acecapades

1
@acecapades Je pense que vous mélangez deux choses. Vous ne pouvez pas attacher un paramètre comme vous pourriez le faire avec performSelector. Le modèle d'action utilisé par le descendant d'UIControl UIButton est de notifier une cible avec un certain sélecteur lorsque controlEvent est déclenché. Lorsque cela se produit dans votre cas, vous pouvez remonter les superviews pour voir qui encapsule votre bouton et demander une méthode pour résoudre la relation entre la table et le modèle, puis faire ce que vous voulez avec cela.
Nick Weaver

1
Je vois. Ça a du sens. Je pense que je comprends ce que vous dites. Merci pour la pointe Nick!
acecapades

quelqu'un peut-il traduire cela rapidement?

23

Réponse rapide:

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

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

Documentation: https://developer.apple.com/documentation/uikit/uicontrol/1618259-addtarget


Quel est le ":" pour après "clic" dans l'appel à UIControl.addTarget?
dumbledad le

1
Les sélecteurs ont un :comme espaces réservés pour les arguments de fonction. Puisque clickprend l' senderargument, qui est remplacé par un :dans la chaîne de sélection.
Etan

Cela a fonctionné récemment pour moi pour Swift 3. button.addTarget (self, action: #selector (ViewController.click), for: UIControlEvents.touchUpInside) func click () {print ("click")} Merci @Glauco Neves de nous avoir indiqué sur la bonne voie
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];

est-il possible d'ajouter 2 actions ou plus?
ErasmoOliveira

9

essaye ça:

écrivez d'abord ceci dans votre fichier .h de viewcontroller

UIButton *btn;

Maintenant, écrivez ceci dans votre fichier .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];

écrivez cette méthode viewDidLoad extérieure dans le fichier .m de votre contrôleur de vue

- (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

Pour Swift 3

Créez d'abord une fonction pour l'action de bouton, puis ajoutez la fonction à votre cible de bouton

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 

}

Veuillez fournir quelques commentaires expliquant comment votre échantillon peut vous aider.
Nogard

UIButton * btnNotification = [UIButton buttonWithType: UIButtonTypeCustom]; btnNotification.frame = CGRectMake (130,80,120,40); // Réglage du cadre du bouton btnNotification.backgroundColor = [UIColor greenColor]; [btnNotification setTitle: @ "create Notification" forState: UIControlStateNormal]; // Définit le titre du bouton [btnNotification addTarget: self action: @selector (btnClicked) forControlEvents: UIControlEventTouchUpInside]; // ajout du bouton Target For [self.view addSubview btnNotification];} - (void) btnClicked {// Ici, vous pouvez écrire des fonctionnalités}
user2677311

- (void) btnClicked {// ici ce que vous voulez, vous pouvez définir l'action pour le bouton // Exemple: aller au prochain viewcontroller nextviewController * nextPage = [nextviewController alloc] init]; [self.navigationController pushviewcontroller: nextPage animé: OUI]; }
user2677311

2

UIButtonhérite de UIControl. Cela a toutes les méthodes pour ajouter / supprimer des actions: UIControl Class Reference . Regardez la section "Préparation et envoi de messages d'action", qui couvre – sendAction:to:forEvent:et – 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];   
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.