Come si aggiunge un'azione a un pulsante a livello di codice in xcode


105

So come aggiungere un'IBAction a un pulsante trascinandola dal generatore di interfacce, ma desidero aggiungere l'azione a livello di programmazione per risparmiare tempo ed evitare di passare continuamente avanti e indietro. La soluzione è probabilmente molto semplice, ma non riesco a trovare alcuna risposta quando la cerco. Grazie!

Risposte:


222

Prova questo:

Swift 4

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

Objective-C

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

Puoi trovare una ricca fonte di informazioni nella documentazione di Apple. Dai un'occhiata alla documentazione di UIButton , rivelerà che UIButton è un discendente di UIControl, che implementa il metodo per aggiungere obiettivi .

-

Avrai bisogno di prestare attenzione a se aggiuntivo colon o non dopo myActionin action:@selector(myAction)

Ecco il riferimento .


Cosa succede se voglio passare un parametro al selettore quando viene premuto il mio pulsante (es. Ho un pulsante all'interno di una UITableViewCell e voglio passare l'oggetto in quella cella quando viene premuto il pulsante della cella)?
acecapades

1
@acecapades Penso che tu stia mescolando due cose. Non puoi allegare un parametro come potresti fare con performSelector. Il modello di azione utilizzato dal discendente UIButton di UIControl è quello di notificare a una destinazione con un determinato selettore quando controlEvent viene attivato. Quando questo accade nel tuo caso, potresti salire le superviste per vedere chi sta incapsulando il tuo pulsante e chiedere un metodo per risolvere la tablecell per modellare la relazione e poi fare quello che vuoi con quello.
Nick Weaver

1
Vedo. Questo ha senso. Penso di aver capito cosa stai dicendo. Grazie per la punta Nick!
acecapades

qualcuno può tradurlo in fretta?

23

Risposta rapida:

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

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

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


Qual è il simbolo ":" dopo il "clic" nella chiamata a UIControl.addTarget?
Dumbledad

1
I selettori hanno :come segnaposto per gli argomenti della funzione. Poiché clickaccetta l' senderargomento, viene sostituito con un :nella stringa del selettore.
Etan

Questo ha funzionato di recente per me per Swift 3. button.addTarget (self, action: #selector (ViewController.click), per: UIControlEvents.touchUpInside) func click () {print ("click")} Grazie @Glauco Neves per averci indicato lungo la strada giusta
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];

è possibile aggiungere 2 o più azioni?
ErasmoOliveira

9

prova questo:

prima scrivi questo nel tuo file .h di viewcontroller

UIButton *btn;

Ora scrivi questo nel tuo file .m di 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];

scrivi questo metodo esterno viewDidLoad nel file .m del tuo controller di visualizzazione

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

Per Swift 3

Creare prima una funzione per l'azione del pulsante, quindi aggiungere la funzione alla destinazione del pulsante

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 

}

si prega di fornire alcuni commenti che spiegano come il tuo campione può essere d'aiuto.
Nogard

UIButton * btnNotification = [UIButton buttonWithType: UIButtonTypeCustom]; btnNotification.frame = CGRectMake (130,80,120,40); // Impostazione cornice pulsante btnNotification.backgroundColor = [UIColor greenColor]; [btnNotification setTitle: @ "create Notification" forState: UIControlStateNormal]; // Imposta il titolo per il pulsante [btnNotification addTarget: self action: @selector (btnClicked) forControlEvents: UIControlEventTouchUpInside]; // aggiungi Target per pulsante [self.view btnNotification];} - (void) btnClicked {// Qui puoi scrivere funzionalità}
user2677311

- (void) btnClicked {// qui quello che vuoi puoi impostare l'azione per il pulsante // Esempio: vai al prossimo viewcontroller nextviewController * nextPage = [nextviewController alloc] init]; [self.navigationController pushviewcontroller: nextPage animated: YES]; }
user2677311

2

UIButtoneredita da UIControl. Questo ha tutti i metodi per aggiungere / rimuovere azioni: Riferimento alla classe UIControl . Guarda la sezione "Preparazione e invio di messaggi di azione", che copre – sendAction:to:forEvent:e – 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];   
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.