web-dev-qa-db-fra.com

Comment définir cible et action pour UIBarButtonItem lors de l'exécution

Essayé cela mais ne fonctionne que pour UIButton:

[btn setTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
54
Sharief

Il suffit de définir directement les propriétés target et action de UIBarButtonItem.

94
Ole Begemann

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);
}
19
mihai

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:)];
14
J. Dave
  UIBarButtonItem *barListBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemAdd target:self action:@selector(getTruckStopListAction)];   
    self.navigationItem.rightBarButtonItem = barListBtn;
    [barListBtn release];
7
sinh99

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

Définissez target et action de votre UIBarButtonItem

Swift 4

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

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

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

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)#>
0
Adam Cooper