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!

aggiesfan64
la source

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 .

Nick Weaver
la source
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

Glauco Neves
la source
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];
Développeur
la source
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
}
Krushnsinh
la source
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 }
Développeur iOS
la source
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)
SanRam
la source
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 

}
user2677311
la source
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:.

odrm
la source
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];   
Arjun Sa
la source