Wie füge ich einer Schaltfläche programmgesteuert in xcode eine Aktion hinzu?

105

Ich weiß, wie man einer Schaltfläche eine IBAction hinzufügt, indem man sie aus dem Interface Builder zieht, aber ich möchte die Aktion programmgesteuert hinzufügen, um Zeit zu sparen und ein ständiges Hin- und Herwechseln zu vermeiden. Die Lösung ist wahrscheinlich sehr einfach, aber ich kann beim Suchen einfach keine Antworten finden. Danke dir!

aggiesfan64
quelle

Antworten:

222

Versuche dies:

Swift 4

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

Ziel c

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

Eine umfangreiche Informationsquelle finden Sie in der Dokumentation von Apple. Wenn Sie sich die Dokumentation des UIButton ansehen , wird deutlich, dass UIButton ein Nachkomme von UIControl ist, das die Methode zum Hinzufügen von Zielen implementiert .

- -

Sie werden zu achten müssen, ob Add Kolon oder nicht nach dem myActionin action:@selector(myAction)

Hier ist die Referenz .

Nick Weaver
quelle
Was ist, wenn ich beim Drücken meiner Schaltfläche einen Parameter an den Selektor übergeben möchte (z. B. wenn sich eine Schaltfläche in einer UITableViewCell befindet und ich das Objekt in dieser Zelle übergeben möchte, wenn die Schaltfläche der Zelle gedrückt wird)?
Acecapades
1
@acecapades Ich denke, Sie mischen zwei Dinge. Sie können keinen Parameter wie bei performSelector anhängen. Das vom UICuttr-Nachkommen UIButton verwendete Aktionsmuster besteht darin, ein Ziel mit einem bestimmten Selektor zu benachrichtigen, wenn controlEvent ausgelöst wird. In diesem Fall können Sie in den Übersichten nachsehen, wer Ihre Schaltfläche einkapselt, und nach einer Methode fragen, um die Beziehung zwischen Tabellenzelle und Modell aufzulösen, und dann damit tun, was Sie wollen.
Nick Weaver
1
Aha. Das macht Sinn. Ich glaube ich verstehe was du sagst. Danke für den Tipp Nick!
Acecapades
kann jemand dies schnell übersetzen?
23

Schnelle Antwort:

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

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

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

Glauco Neves
quelle
Was ist das ":" für nach "Klick" im Aufruf von UIControl.addTarget?
Dumbledad
1
Selektoren haben einen :Platzhalter für Funktionsargumente. Da clicknimmt das senderArgument, das durch ein :in der Auswahlzeichenfolge ersetzt wird.
Etan
Dies funktionierte kürzlich für mich für Swift 3. button.addTarget (self, action: #selector (ViewController.click), für: UIControlEvents.touchUpInside) func click () {print ("click")} Danke @Glauco Neves, dass Sie uns gezeigt haben auf dem richtigen Weg
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];
Entwickler
quelle
Ist es möglich, 2 oder mehr Aktionen hinzuzufügen?
ErasmoOliveira
9

Versuche dies:

Schreiben Sie dies zuerst in Ihre .h-Datei von viewcontroller

UIButton *btn;

Schreiben Sie dies nun in Ihre .m-Datei von 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];

Schreiben Sie diese externe viewDidLoad-Methode in die .m-Datei Ihres View Controllers

- (IBAction)btnClicked:(id)sender
{
   //Write a code you want to execute on buttons click event
}
krushnsinh
quelle
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 }
iOSDeveloper
quelle
6

Für Swift 3

Erstellen Sie zuerst eine Funktion für die Tastenaktion und fügen Sie die Funktion dann Ihrem Tastenziel hinzu

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

button.addTarget(self, action: #selector(buttonAction),for: .touchUpInside)
SanRam
quelle
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
quelle
Bitte geben Sie einige Kommentare an, in denen erläutert wird, wie Ihre Probe helfen kann.
Nogard
UIButton * btnNotification = [UIButton buttonWithType: UIButtonTypeCustom]; btnNotification.frame = CGRectMake (130,80,120,40); // Einstellung des Schaltflächenrahmens btnNotification.backgroundColor = [UIColor greenColor]; [btnNotification setTitle: @ "create Notification" forState: UIControlStateNormal]; // Legen Sie den Titel für die Schaltfläche fest [btnNotification addTarget: self action: @selector (btnClicked) forControlEvents: UIControlEventTouchUpInside]; // Target hinzufügen btnNotification];} - (void) btnClicked {// Hier können Sie Funktionen schreiben}
user2677311
- (void) btnClicked {// hier können Sie die Aktion für die Schaltfläche festlegen, // was auch immer Sie möchten. Beispiel: Gehen Sie zum nächsten Ansichtscontroller. nextviewController * nextPage = [nextviewController alloc] init]; [self.navigationController pushviewcontroller: nextPage animiert: YES]; }
user2677311
2

UIButtonerbt von UIControl. Das hat alle Methoden zum Hinzufügen / Entfernen von Aktionen: UIControl-Klassenreferenz . Lesen Sie den Abschnitt "Vorbereiten und Senden von Aktionsnachrichten", in dem – sendAction:to:forEvent:und behandelt werden – addTarget:action:forControlEvents:.

odrm
quelle
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
quelle