Problème rajout bouton à  une toolbar

tboptbop Membre
22:18 modifié dans Vos applications #1
Bonjour à  tous

Voilà  j'aimerais rajouter un bouton cancel à  la toolbar de mon UINavigationController customisé.

Mais lors de l'exécution il affiche bien la toolbar mais jamais le bouton.

D'où cela peut-il provenir ?

@interface UICustomNavigationController : UINavigationController<br />{<br />&nbsp; Component* mpComponent;<br />}<br /><br />-(id) initWithRootViewController:(UIViewController*)viewcontroller withComponent:(Component*)component;<br />-(void) onCancelButton;<br /><br />@end<br /><br />@implementation UICustomNavigationController<br /><br />-(id) initWithRootViewController:(UIViewController*)viewcontroller withComponent:(Component*)component<br />{<br />&nbsp; if((self != [super initWithRootViewController:viewcontroller]))<br />&nbsp; {<br />&nbsp; &nbsp; return nil;<br />&nbsp; }<br />&nbsp; <br />&nbsp; mpComponent = component;<br />&nbsp; <br />&nbsp; SEL selecteur = @selector(onCancelButton);<br />&nbsp; <br />&nbsp; UIBarButtonItem* cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:selecteur];<br />&nbsp; <br />&nbsp; NSArray* itemArray = [[NSArray alloc] initWithObjects:cancelButton, nil];<br />&nbsp; <br />&nbsp; [self setToolbarHidden:NO animated:NO]; <br />&nbsp; <br />&nbsp; [self setToolbarItems:itemArray animated:NO];<br />&nbsp; <br />&nbsp; [itemArray release];<br />&nbsp; <br />&nbsp; [cancelButton release];<br />&nbsp; <br />&nbsp; return self;<br />}<br /><br />-(void) onCancelButton<br />{<br />&nbsp; mpComponent-&gt;exitModalState(-1);<br />}<br /><br />@end<br />

Réponses

  • lgriffielgriffie Membre
    22:18 modifié #2
    Habituellement j'utilise cette méthode dans viewDidLoad et ça marche. Essayes d'ajouter ton bouton dans la méthode viewDidLoad ou viewWillAppear

    <br />self.toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0, (480.0 - 44.0 - 44.0 - 20.0), 320.0, 44.0)];<br />	<br />	UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace<br />																			&nbsp; target:nil<br />																			&nbsp; action:nil];<br />	<br />	UIBarButtonItem *mapButton = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@&quot;shopping_map.png&quot;]<br />																					 style:UIBarButtonItemStyleBordered<br />																					target:self<br />																					action:@selector(launchMap:)];<br />	<br />	[manageButton setWidth:110.0];<br />	<br />	[self.toolBar setItems:[NSArray arrayWithObjects: mapButton, flexItem, nil] animated:YES];<br />	[self.view addSubview:self.toolBar];<br />	<br />	[mapButton release];<br /><br />
    
  • tboptbop Membre
    22:18 modifié #3
    Ok je vois ce que tu veux dire je vais essayer tout de suite je te tiens au courant.
  • CeetixCeetix Membre
    22:18 modifié #4
    Tu peux aussi essayer :

    <br />self.navigationItem.leftBarButtonItem = tonBoutonItem;<br />
    
  • tboptbop Membre
    22:18 modifié #5
    Bonjour tout le monde.


    Je reposte ici car le problème est très similaire.

    Alors pour info, mon précédent problème s'était résolu par un rajout non pas à  une toolbar mais à  un NavigationController.

    J'ai un peu avancé dans mon projet et cette fois j'ai le même problème que ma toolbar... mais avec une NavigationBar !

    Toujours pareil, je tente de rajouter des boutons mais ils n'apparaissent jamais. Pire je recopie mot pout mot le code qui fonctionnait avec un NavigationController dans un autre projet mais ça ne marche pas quand même.

    Le fait que ce soit un NavigationBar et non un NavigationController change-t-il quelque chose ?

    Je vous mets les deux codes, celui qui fonctionne, et celui qui ne fonctionne pas.


    Celui qui fonctionne :

    <br />@interface UICustomTableViewController : UITableViewController<br />{<br />&nbsp; UINavigationController* mNaviController;<br />&nbsp; <br />&nbsp; NSMutableArray* modelArray;<br />&nbsp; <br />&nbsp; const UIMenu* mpRoot;<br />	Component *mpComponent;<br />}<br /><br />-(id) initWithRoot:(const UIMenu *)uimenu withComponent:(Component*)comp;<br />-(id) initWithRoot:(const UIMenu *)uimenu withNaviController:(UINavigationController*)navi withComponent:(Component*)comp;<br />-(void) setNaviController:(UINavigationController*)navi;<br />-(void) showExitButton;<br />-(IBAction) onExitUIMenu: (id)sender;<br /><br />@end<br /><br />@implementation UICustomTableViewController<br /><br />[...]<br /><br />-(void) showExitButton<br />{<br />&nbsp; UIBarButtonItem* exitButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemCancel <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; target: self <br />																																							action: @selector(onExitUIMenu:)];<br />&nbsp; <br />&nbsp; [mNaviController.navigationBar.topItem setRightBarButtonItem:exitButton	animated:YES];<br />}<br /><br />[...]<br /><br />@end<br /><br />
    


    Celui qui ne fonctionne pas :

    <br />@interface UICustomNaviBar : UINavigationBar<br />{<br />&nbsp; UIPlaybackBar* mpComponent;<br />&nbsp; BOOL mIsplaying;<br />}<br /><br />-(id) initWithComponent:(UIPlaybackBar*)component;<br />-(void) onPlay;<br />-(void) onRec;<br /><br />@end<br /><br />@implementation UICustomNaviBar<br /><br />-(id) initWithComponent:(UIPlaybackBar*)component<br />{<br />&nbsp; if((self != [super init]))<br />&nbsp; {<br />&nbsp; &nbsp; return nil;<br />&nbsp; }<br />&nbsp; <br />&nbsp; mpComponent = component;<br />&nbsp; <br />&nbsp; UIBarButtonItem* playItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:self action:@selector(onPlay)];<br />&nbsp; [self.topItem setLeftBarButtonItem:playItem];<br />&nbsp; <br />&nbsp; UIBarButtonItem* recItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:self action:@selector(onRec)];<br />&nbsp; [self.topItem setRightBarButtonItem:recItem animated:NO];<br />&nbsp; <br />&nbsp; mIsplaying = NO;<br />&nbsp; <br />&nbsp; return self;<br />}<br /><br />
    


    Merci pour tout
  • tboptbop Membre
    22:18 modifié #6
    Bon.

    J'ai une solution partielle.

    Si je le fais hériter d'un UINavigationController ça fonctionne. Mais ça fait pas mal foirer mon interface (faut savoir que je lie une librairie graphique objective-c dans une librairie graphique C++ pour une application iphone), donc pas toujours convaincu.

    Pourquoi donc un UINavigationBar sans controller ne veut il pas m'afficher ces foutus boutons ?
  • tboptbop Membre
    22:18 modifié #7
    On m'avait soufflé ce qui pouvait être la réponse en me disant qu'il fallait absolument initiliaser la UINavigationItem avec un titre sans quoi elle ne pourrait pas afficher les boutons... mais malheureusement ça ne fonctionne toujours pas (pour la méthode héritage de UINavigationBar pure).

    Use the initWithTitle:  method to create a navigation item specifying the item's title. The item cannot be represented on the navigation bar without a title. Use the backBarButtonItem  property if you want to use a different title when this item is the back item. The backBarButtonItem  property is displayed as the back button unless a custom left view is specified.


    http://developer.apple.com/iphone/library/documentation/uikit/reference/UINavigationItem_Class/Reference/UINavigationItem.html#//apple_ref/occ/instp/UINavigationItem/titleView
Connectez-vous ou Inscrivez-vous pour répondre.