Frage

versucht, dies funktioniert aber nur für UIButton:

[btn setTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
War es hilfreich?

Lösung

Just stellen Sie die UIBarButtonItem des target und action Eigenschaften direkt.

Andere Tipps

UIBarButtonItem tut das gleiche addTarget Methode haben, damit Sie sie direkt setzen haben wie folgt

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);
}

Ich lief in ein ähnliches Problem ... Ich nehme an, Sie bedeuten, dass, wenn Ihr UIButton nicht Teil Ihres UITabBar zu Anruf ist btnClicked dann in geeigneter Weise funktioniert. Wenn dies das Problem ist, schlagen Sie werden dann überprüfen Sie Ihre btnClicked Methode und ändern Sie es aus:

-btnClicked:(id)sender

-(void) btnClicked:(id)sender

das, und erkläre in der Header-Datei ...

btnClicked

Für das, was es wert ist, das ist, wie ich ein Setup-Taste in tabbarbuttonitem:

UIBarButtonItem *exampleButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"button.png"] style:UIBarButtonItemStylePlain target:self action:@selector(btnClicked:)];

Set target und action Ihre UIBarButtonItem

Swift 5 & 4

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

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

Wenn Sie dies oft genug in Ihrem Code benötigen, um es ist schön, gehen Sie voran und erweitern UIBarButtonItem die ich weiter unten in Swift gemacht habe. :)

import UIKit

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

Als Beispiel mit selbst als UIViewController, würden Sie rufen Sie einfach an:

self.myBarButtonItem.addTargetForAction(self, action: #selector(buttonPressed(_:))
  UIBarButtonItem *barListBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemAdd target:self action:@selector(getTruckStopListAction)];   
    self.navigationItem.rightBarButtonItem = barListBtn;
    [barListBtn release];

@ wp42 Es funktioniert heute.

Eine geschickte Art und Weise, dies zu tun in Objective-C ist eine Kategorie UIBarButtonItem Klasse hinzufügen:

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:)];

Wenn Sie programmatisch hinzufügen die UIBarButtonItem, den besten Weg, das Ziel und die Aktion zu setzen, ist die Schaltfläche mit einem der folgenden Methoden zu 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)#>

Sie können die addTarget Methode auszuprobieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top