Essayé cela mais ne fonctionne que pour UIButton:
[btn setTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
Il suffit de définir directement les propriétés target
et action
de UIBarButtonItem.
UIBarButtonItem n'a pas la même méthode addTarget, vous devez donc les définir directement comme suit
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);
}
J'ai rencontré un problème similaire ... Je suppose que vous voulez dire que si votre UIButton ne fait pas partie de votre UITabBar pour appeler btnClicked, alors il fonctionne correctement. Si tel est le problème que vous proposez, vérifiez votre méthode btnClicked et modifiez-la en:
-btnClicked:(id)sender
à
-(void) btnClicked:(id)sender
que, et déclarer btnClicked dans le fichier d'en-tête ...
Pour ce que cela vaut, voici comment j'ai configuré un bouton dans tabbarbuttonitem:
UIBarButtonItem *exampleButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"button.png"] style:UIBarButtonItemStylePlain target:self action:@selector(btnClicked:)];
UIBarButtonItem *barListBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemAdd target:self action:@selector(getTruckStopListAction)];
self.navigationItem.rightBarButtonItem = barListBtn;
[barListBtn release];
Si vous avez besoin de suffisamment de temps dans votre code, c'est bien d'aller de l'avant et de prolonger UIBarButtonItem
comme je l'ai fait ci-dessous dans Swift. :)
import UIKit
extension UIBarButtonItem {
func addTargetForAction(target: AnyObject, action: Selector) {
self.target = target
self.action = action
}
}
Par exemple, avec self en tant que UIViewController
, vous appelez simplement:
self.myBarButtonItem.addTargetForAction(self, action: #selector(buttonPressed(_:))
Définissez target
et action
de votre UIBarButtonItem
Swift 4
button.target = self
button.action = #selector(action)
@objc func action (sender:UIButton) {
print("action")
}
@ wp42 Cela fonctionne aujourd'hui.
Une façon astucieuse de le faire dans objective-C consiste à ajouter une catégorie à la classe UIBarButtonItem:
fichier .h
#import <UIKit/UIKit.h>
@interface UIBarButtonItem (addons)
-(void)addTarget:(id)target andAction:(SEL)action;
@end
fichier .m
#import "UIBarButtonItem+addons.h"
@implementation UIBarButtonItem (addons)
-(void)addTarget:(id)target andAction:(SEL)action{
[self setTarget:target];
[self setAction:action];
}
@end
En pratique:
[myBtn addTarget:self andAction:@selector(myFunction:)];
Si vous ajoutez par programme UIBarButtonItem, le meilleur moyen de définir la cible et l'action consiste à initialiser le bouton avec l'une des méthodes suivantes:
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)#>