2010-02-25 8 views

Odpowiedz

85

Wystarczy ustawić UIBarButtonItem za target i action właściwości bezpośrednio.

+38

N.B. Działa to tylko wtedy, gdy 'UIBarButtonItem' nie używa niestandardowego widoku, takiego jak' UIButton' –

+21

Dla widoków niestandardowych, użyj: [button addTarget: self action: @selector (buttonPressed) forControlEvents: UIControlEventTouchUpInside]; – Jarrod

+0

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

14

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

dodatkowo, możesz wyjąć ":" tworząc ...: @ selektor (btnClicked :)]; do ...: selektor @ (btnClicked)]; –

-4

Możesz spróbować out metody addTarget.

+2

Nie ma metody addTarget dla UIBarButtonItem. – Mike

+0

Metohd nie istnieje, sprawdź dokumentację: https://developer.apple.com/library/IOs/documentation/UIKit/Reference/UIBarButtonItem_Class/Reference/Reference.html To, o czym myślisz, to UIButton – katzenhut

7
UIBarButtonItem *barListBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemAdd target:self action:@selector(getTruckStopListAction)]; 
    self.navigationItem.rightBarButtonItem = barListBtn; 
    [barListBtn release]; 
+0

Dla niektórych powód, dla którego selektor nie jest "wywoływany" dla mnie .. Hmm .. – Entalpi

14

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

Dziękuję !! to jest dokładnie to, czego potrzebowałem, aby zaimplementować moją niestandardową klasę UIBarButtonItem –

+0

wspaniałą odpowiedzią, szczególnie jeśli chcesz utworzyć przyciski w czasie projektowania! – mikebz

0

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)#> 
6

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(_:)) 
1

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

Ustaw target i action z Twojego UIBarButtonItem

Swift 4

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

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