2010-02-25 3 views
42

Пробовал это, но работает только для UIButton:Как установить цели и действия для UIBarButtonItem во время выполнения

[btn setTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; 
+0

Это не кажется, действительно даже для UIButton , – Oscar

+6

Для UIButton правильным методом является '-addTarget: action: forControlEvents:' – Matoe

ответ

85

Просто установите UIBarButtonItem в target и action свойства непосредственно.

+38

N.B. Это работает только в том случае, если 'UIBarButtonItem' не использует пользовательский вид, например' UIButton' –

+21

. Для пользовательских представлений используйте: [button addTarget: self action: @selector (buttonPressed) forControlEvents: UIControlEventTouchUpInside]; – Jarrod

+0

Можете ли вы привести пример того, к чему должны быть настроены? Цель говорит, что требуется AnyObject? Должно ли быть установлено значение UIGestureRecognizer? – Unome

14

У меня возникла аналогичная проблема ... Предполагаю, вы имеете в виду, что если ваш UIButton не является частью вашего UITabBar, чтобы вызвать btnClicked, то он работает соответствующим образом. Если это проблема, которую вы предлагаете, то проверьте ваш метод btnClicked и изменить его с:

-btnClicked:(id)sender 

в

-(void) btnClicked:(id)sender 

, что и объявить btnClicked в файле заголовка ...

Для чего это важно, так я настраиваю кнопку в tabbarbuttonitem:

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

дополнительно, вы можете вынуть «:», делая ...: @ selector (btnClicked :)]; в ...: @ селектор (btnClicked)]; –

-4

Возможно, вы захотите попробовать из метода addTarget.

+2

Нет метода addTarget для UIBarButtonItem. – Mike

+0

Этот метод не существует, проверьте документы: https://developer.apple.com/library/IOs/documentation/UIKit/Reference/UIBarButtonItem_Class/Reference/Reference.html Что вы думаете о UIButton – katzenhut

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

Для некоторых причина, по которой селектор не «называется» для меня .. Хмм .. – Entalpi

14

UIBarButtonItem оленья кожа имеют один и тот же метод addTarget, так что вы должны установить их непосредственно следующим

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

Спасибо !! это именно то, что мне нужно, чтобы реализовать свой собственный класс UIBarButtonItem –

+0

, особенно если вы хотите создать кнопки во время разработки! – mikebz

0

Если вы программно добавлять UIBarButtonItem, лучший способом установки цели и действия является инициализация кнопки одним из следующих способов:

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

Если вам нужно это достаточно времени в вашем коде, приятно продолжить и расширить UIBarButtonItem, который я сделал ниже в Swift. :)

import UIKit 

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

В качестве примера, с самим собой, как UIViewController, вы просто звоните:

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

@ wp42 Это делает работу сегодня.

Изящный способ сделать это в Objective-C добавляет категорию UIBarButtonItem класс:

.h файл

#import <UIKit/UIKit.h> 

@interface UIBarButtonItem (addons) 

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

@end 

.м-файл

#import "UIBarButtonItem+addons.h" 

@implementation UIBarButtonItem (addons) 

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

@end 

На практике:

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

Установите target и action вашей UIBarButtonItem

Swift 4

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

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