2009-09-12 4 views
15

J'ai essayé cette approche/pirater: http://blog.blackwhale.at/2009/06/uibuttons-in-uinavigationbar/Comment ajouter plus d'un UIBarButton sur UINavigationItem.rightBarButtonItem (ou leftBarButtonItem)?

Le problème est ce qui laisse une couture faible. J'ai essayé de définir l'image d'arrière-plan de la barre d'outils imbriquée à une image que j'ai capturé de ce qu'elle devrait être. Cela n'a pas fonctionné. L'image n'a pas été appliquée. J'ai également essayé d'utiliser un UINavigationBar imbriqué et cela n'a pas semblé fonctionner.

J'ai vu cela dans plusieurs applications iPhone. Est-ce que quelqu'un sait comment? [EDIT] Je veux que les boutons ressemblent à des UIBarButtonItems normaux et puissent utiliser des styles système comme UIBarButtonSystemItemAdd, UIBarButtonSystemItemRefresh. Le lien que j'ai fourni fait ceci excepté que vous pouvez voir une couture faible parce que c'est un UIToolbar imbriqué dans la barre de navigation.

Veuillez ne pas mentionner ceci en enfreignant les directives d'interface humaine. (Nous savons).

Je vous remercie de contribuer vos hacks ... c'est la seule façon de le faire!

+0

Le lien que vous avez mentionné est en baisse :-( –

Répondre

6

Pour se débarrasser de l'arrière-plan ('seam') d'un UIToolbar, créer une sous-classe de UIToolbar et remplacer la méthode rect (void) drawRect: (CGRect) rect. Laissez ce champ vide et votre UIToolbar n'aura plus d'arrière-plan. Juste utilisé cela dans mon propre projet et a très bien fonctionné. Nous avons trouvé ce dans les commentaires de: http://osmorphis.blogspot.com/2009/05/multiple-buttons-on-navigation-bar.html

+2

FYI, iOS 5.0 prend en charge plusieurs boutons de la barre de navigation. Voir la réponse que j'ai posté ci-dessous. Toutefois, si vous avez besoin de déployer des versions antérieures du système d'exploitation, vous devrez utiliser la technique décrite dans cette réponse. –

2

voir l'exemple uicatalogue disponible sur le site de Apple gratuitement ... ils ont utilisé le contrôle uisegmented pour montrer trois boutons à la place du bouton de la barre à droite sur la barre navigaion ...

+0

Désolé, je ne suis pas à la recherche de un contrôle de segment.Je veux les boutons standard comme + (ajouter un bouton), Modifier, rafraîchir l'icône et ainsi de suite – Cal

+0

vous pouvez ajouter une vue personnalisée avec vos boutons souhaités ... recherche google pour le code de vue personnalisé .. vous aurez être en mesure de l'obtenir –

+0

il existe de nombreux didacticiels sur le net pour ce faire.Si vous avez essayé de poster votre code –

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

Je veux que les boutons ressemblent aux UIBarButtonItems normaux et puissent utiliser des styles système comme UIBarButtonSystemItemAdd, UIBarButtonSystemItemRefresh. Le lien que j'ai fourni fait ceci sauf que vous pouvez voir une couture faible parce que c'est un UIToolbar imbriqué dans la barre de navigation. – Cal

+0

alex réponse fonctionne pour vous parfaitement –

+0

J'ai essayé cela avant et le bouton est différent. Mais vous pouvez prendre une capture d'écran de l'apparence que vous voulez et l'utiliser dans le bouton. – Cal

0

Dans iOS 4.x, clearColor semble n'avoir aucun effet sur l'UIToolbar, alors que son drawRect est surchargé.

36

iOS 5.0 prend désormais en charge plusieurs boutons. Voir la documentation iOS pour UINavigationItem. Plus précisément, ce qui suit:

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; 
0

je suis venu avec une fonction d'aide que je utilise sur mon projet. Fondamentalement, il vérifie s'il y a déjà un bouton sur la barre et soit ajouter le nouveau ou le fusionner avec les boutons existants.Ainsi, vous pouvez appeler la fonction juste une fois 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 du contrôleur de vue:.

[Helper AddButtonToBar:self withImage:@"imageName.png" withAction:@selector(myAction) withFrame:CGRectMake(0, 0, 24, 24)]; 
Questions connexes