próbowałem, ale działa tylko na UIButton:Jak ustalać cele i działania dla UIBarButtonItem przy starcie
[btn setTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
próbowałem, ale działa tylko na UIButton:Jak ustalać cele i działania dla UIBarButtonItem przy starcie
[btn setTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
Wystarczy ustawić UIBarButtonItem za target
i action
właściwości bezpośrednio.
N.B. Działa to tylko wtedy, gdy 'UIBarButtonItem' nie używa niestandardowego widoku, takiego jak' UIButton' –
Dla widoków niestandardowych, użyj: [button addTarget: self action: @selector (buttonPressed) forControlEvents: UIControlEventTouchUpInside]; – Jarrod
Czy możesz podać przykład tego, do czego należy je ustawić? Cel mówi, że bierze AnyObject? Czy powinno to być ustawione na UIGestureRecognizer? – Unome
Wpadłem na podobny problem ... Zakładam, że masz na myśli to, że jeśli twój UIButton nie jest częścią twojego UITabBar do wywoływania btnClicked, to działa poprawnie. Jeśli jest to problem, który proponują następnie sprawdzić metodę btnClicked i zmienić go z:
-btnClicked:(id)sender
do
-(void) btnClicked:(id)sender
że i zadeklarować btnClicked w pliku nagłówka ...
Jeśli chodzi o to, co warto, tak skonfiguruję przycisk w tabbarbuttonitem:
UIBarButtonItem *exampleButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"button.png"] style:UIBarButtonItemStylePlain target:self action:@selector(btnClicked:)];
dodatkowo, możesz wyjąć ":" tworząc ...: @ selektor (btnClicked :)]; do ...: selektor @ (btnClicked)]; –
Możesz spróbować out metody addTarget.
UIBarButtonItem *barListBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemAdd target:self action:@selector(getTruckStopListAction)];
self.navigationItem.rightBarButtonItem = barListBtn;
[barListBtn release];
Dla niektórych powód, dla którego selektor nie jest "wywoływany" dla mnie .. Hmm .. – Entalpi
UIBarButtonItem robi mieć tę samą metodę addTarget więc trzeba ustawić je bezpośrednio następująco
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);
}
Dziękuję !! to jest dokładnie to, czego potrzebowałem, aby zaimplementować moją niestandardową klasę UIBarButtonItem –
wspaniałą odpowiedzią, szczególnie jeśli chcesz utworzyć przyciski w czasie projektowania! – mikebz
Jeśli programowo dodając UIBarButtonItem najlepsza sposobem ustawienia celu i działania jest zainicjowanie przycisku za pomocą jednej z następujących metod:
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)#>
Jeśli potrzebujesz tego wystarczająco wiele razy w swoim kodzie, dobrze jest dodać rozszerzenie UIBarButtonItem
, które zrobiłem poniżej w Swift. :)
import UIKit
extension UIBarButtonItem {
func addTargetForAction(target: AnyObject, action: Selector) {
self.target = target
self.action = action
}
}
Jako przykład, z siebie jako UIViewController
, że jesteś po prostu zadzwonić:
self.myBarButtonItem.addTargetForAction(self, action: #selector(buttonPressed(_:))
@ wp42 To działa dzisiaj.
fajny sposób to zrobić w Objective-C jest dodanie kategorię do UIBarButtonItem Klasa:
.h plik
#import <UIKit/UIKit.h>
@interface UIBarButtonItem (addons)
-(void)addTarget:(id)target andAction:(SEL)action;
@end
.m plik
#import "UIBarButtonItem+addons.h"
@implementation UIBarButtonItem (addons)
-(void)addTarget:(id)target andAction:(SEL)action{
[self setTarget:target];
[self setAction:action];
}
@end
W praktyce:
[myBtn addTarget:self andAction:@selector(myFunction:)];
Ustaw target
i action
z Twojego UIBarButtonItem
Swift 4
button.target = self
button.action = #selector(action)
@objc func action (sender:UIButton) {
print("action")
}
To nie wydaje się być ważne nawet dla UIButton . – Oscar
Dla UIButton właściwą metodą jest '-addTarget: action: forControlEvents:' – Matoe