Wie zur Laufzeit Ziel und Aktion für UIBarButtonItem einstellen
-
22-09-2019 - |
Frage
[btn setTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
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 ...
btnClickedFü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.