web-dev-qa-db-de.com

Festlegen von Ziel und Aktion für UIBarButtonItem zur Laufzeit

Versucht dies, funktioniert aber nur für UIButton:

[btn setTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
54
Sharief

Setzen Sie einfach die Eigenschaften target und action des UIBarButtonItem direkt.

94
Ole Begemann

UIBarButtonItem hat nicht die gleiche addTarget-Methode, daher müssen Sie sie direkt wie folgt festlegen

btn.target = self;
btn.action = @selector(barButtonCustomPressed:);

...

// can specify UIBarButtonItem instead of id for this case
-(IBAction)barButtonCustomPressed:(UIBarButtonItem*)btn 
{
    NSLog(@"button tapped %@", btn.title);
}
19
mihai

Ich bin auf ein ähnliches Problem gestoßen ... Ich nehme an, Sie meinen, wenn Ihr UIButton nicht Teil Ihrer UITabBar ist, um btnClick aufzurufen, dann funktioniert es entsprechend. Wenn dies das Problem ist, das Sie vorschlagen, überprüfen Sie Ihre btnClicked-Methode und ändern Sie sie von:

-btnClicked:(id)sender

zu

-(void) btnClicked:(id)sender

das und deklarieren Sie btnClicked in der Header-Datei ...

Das ist es wert, wie ich eine Schaltfläche in tabbarbuttonitem einrichte:

UIBarButtonItem *exampleButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"button.png"] style:UIBarButtonItemStylePlain target:self action:@selector(btnClicked:)];
14
J. Dave
  UIBarButtonItem *barListBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemAdd target:self action:@selector(getTruckStopListAction)];   
    self.navigationItem.rightBarButtonItem = barListBtn;
    [barListBtn release];
7
sinh99

Wenn Sie dies genug in Ihrem Code benötigen, ist es schön, die Variable UIBarButtonItem zu erweitern, die ich unten in Swift durchgeführt habe. :)

import UIKit

extension UIBarButtonItem {
    func addTargetForAction(target: AnyObject, action: Selector) {
        self.target = target
        self.action = action
    }
}

Als Beispiel mit self als UIViewController würden Sie einfach Folgendes aufrufen:

self.myBarButtonItem.addTargetForAction(self, action: #selector(buttonPressed(_:))
7
serenn

Setzen Sie target und action Ihrer UIBarButtonItem

Swift 4

button.target = self
button.action = #selector(action)

@objc func action (sender:UIButton) {
    print("action")
}
6
Haroldo Gondim

@ wp42 Es funktioniert heute.

Eine einfache Möglichkeit, dies in object-C zu tun, ist das Hinzufügen einer Kategorie zur UIBarButtonItem-Klasse:

.h Datei

#import <UIKit/UIKit.h>

@interface UIBarButtonItem (addons)

-(void)addTarget:(id)target andAction:(SEL)action;

@end

.m Datei

#import "UIBarButtonItem+addons.h"

@implementation UIBarButtonItem (addons)

-(void)addTarget:(id)target andAction:(SEL)action{
   [self setTarget:target];
   [self setAction:action];
}

@end

In der Praxis:

[myBtn addTarget:self andAction:@selector(myFunction:)];
1
Itai Spector

Wenn Sie UIBarButtonItem programmgesteuert hinzufügen, können Sie Ziel und Aktion am besten festlegen, indem Sie die Schaltfläche mit einer der folgenden Methoden initialisieren:

UIBarButtonItem *customButton = [[UIBarButtonItem alloc] initWithImage:<#(UIImage)#> style:<#(UIBarButtonItemStyle)#> target:<#(id)#> action:<#(SEL)#>

UIBarButtonItem *customButton = [UIBarButtonItem alloc] initWithTitle:<#(NSString *)#> style:<#(UIBarButtonItemStyle)#> target:<#(id)#> action:<#(SEL)#>

UIBarButtonItem *customButton = [UIBarButtonItem alloc] initWithImage:<#(UIImage *)#> landscapeImagePhone:<#(UIImage *)#> style:<#(UIBarButtonItemStyle)#> target:<#(id)#> action:<#(SEL)#>
0
Adam Cooper