Comment ajouter plus d'un UIBarButton sur UINavigationItem.rightBarButtonItem (ou leftBarButtonItem)?

StackOverflow https://stackoverflow.com/questions/1414510

Question

J'ai essayé cette approche / bidouille: http://blog.blackwhale.at/2009/06/uibuttons-in- uinavigationbar /

Le problème est que cela laisse une mince couture. J'ai essayé de définir l'image d'arrière-plan de la barre d'outils imbriquée sur une image de ce qu'elle devrait être. Ça n'a pas marché. L'image n'a pas été appliquée. J'ai également essayé d'utiliser un UINavigationBar imbriqué et cela ne semblait pas fonctionner.

J'ai vu cela se faire dans plusieurs applications iPhone. Est-ce que quelqu'un sait comment?

[EDIT] Je veux que les boutons ressemblent à UIBarButtonItems normaux et puissent utiliser des styles système tels que UIBarButtonSystemItemAdd, UIBarButtonSystemItemRefresh. Le lien que j’ai fourni fait cela, sauf que vous pouvez voir une faible couture car c’est une barre UIToolbar imbriquée dans la barre de navigation.

S'il vous plaît, ne mentionnez pas cette violation des directives de l'interface humaine. (Nous savons).

J'apprécie que vous contribuiez à vos hacks ... c'est le seul moyen de le faire!

Était-ce utile?

La solution

Pour supprimer l'arrière-plan ("couture") d'une UIToolbar, créez une sous-classe de UIToolbar et substituez la méthode (void) drawRect: (CGRect) rect. Laissez ce champ vide et votre UIToolbar n'aura plus de fond.

Je viens de l'utiliser dans mon propre projet et j'ai bien travaillé. Trouvé ceci dans les commentaires de: http: // osmorphis. blogspot.com/2009/05/multiple-buttons-on-navigation-bar.html

Autres conseils

iOS 5.0 prend désormais en charge plusieurs boutons. Consultez la documentation iOS pour UINavigationItem. Plus précisément, les éléments suivants:

Propriétés:

@property(nonatomic, copy) NSArray *leftBarButtonItems;
@property(nonatomic, copy) NSArray *rightBarButtonItems;
@property BOOL leftItemsSupplementBackButton;

Méthodes:

- (void)setLeftBarButtonItems:(NSArray *)items animated:(BOOL)animated;
- (void)setRightBarButtonItems:(NSArray *)items animated:(BOOL)animated;

J'ai posté un code pour ajouter deux boutons à droite de la barre de navigation . Vous pouvez définir barStyle = -1 au lieu de sous-classer UIToolbar .

UIView *parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, myWidth, myHeight)];
// make UIView customView1... (UILabel, UIButton, etc.) with desired frame and settings
[parentView addSubview:customView1];
[customView1 release];
// make UIView customView2... (UILabel, UIButton, etc.) with desired frame and settings
[parentView addSubview:customView2];
[customView2 release];
UIBarButtonItem *customBarButtomItem = [[UIBarButtonItem alloc] initWithCustomView:parentView];
[parentView release];
self.navigationItem.rightBarButtonItem = customBarButtomItem;
[customBarButtomItem release];

Je ne peux pas commenter, mais en plus de @iworkinprogress, je devais définir la couleur d'arrière-plan UIToolbar pour qu'elle soit claire:

    [toolbar setBackgroundColor:[UIColor clearColor]];

Cela a également été trouvé dans les commentaires de http: //osmorphis.blogspot.com/2009/05/multiple-buttons-on-navigation-bar.html .

Sous iOS 4.x, clearColor ne semble pas avoir d’effet sur la barre UIToolbar, alors qu’il remplace son drawRect: did.

J'ai créé une fonction d'aide que j'utilise dans tout mon projet. En gros, il vérifie s’il existe déjà un bouton dans la barre et ajoute le nouveau ou le fusionne avec les boutons existants. Vous pouvez donc appeler la fonction une ou plusieurs fois:

+ (void)AddButtonToBar:(UIViewController *)controller withImage:(NSString *)imageName withAction:(SEL)action withFrame:(CGRect) frame{
    UIButton *newButton =[[UIButton alloc] init];
    [newButton setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
    newButton.frame = frame;
    [newButton addTarget:controller action:action forControlEvents:UIControlEventTouchUpInside];

    if ([[controller.navigationItem rightBarButtonItems] count] == 0)
        [controller.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:newButton]];
    else {
        NSMutableArray *existingButtons = [[NSMutableArray alloc] initWithArray:[controller.navigationItem rightBarButtonItems]];
        [existingButtons addObject:[[UIBarButtonItem alloc] initWithCustomView:newButton]];
        [controller.navigationItem setRightBarButtonItems:(NSArray *)existingButtons];
    }
}

Appelez-le depuis le contrôleur de vue:

[Helper AddButtonToBar:self withImage:@"imageName.png" withAction:@selector(myAction) withFrame:CGRectMake(0, 0, 24, 24)];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top