UINavigationController

yass_1988yass_1988 Membre
juin 2012 modifié dans Vos applications #1
J'ai un ViewController avec un navigationController





[[[/color][/color][color=#B41CA4][color=#000088]self[/color][/color][color=#000000][color=#000000] [/color][/color][color=#000000]navigationController[/color][color=#000000][color=#666600]][/color][color=#000000] [/color][/color][color=#000000]setNavigationBarHidden[/color][color=#000000][color=#666600]:[/color][/color][color=#B41CA4][color=#000000]NO[/color][/color][color=#000000][color=#000000] [/color][/color][color=#000000]animated[/color][color=#000000][color=#666600]:[/color][/color][color=#B41CA4][color=#000000]NO[/color][/color][color=#000000][color=#666600]];[/color][/color]<br />
<br />
[color=#401082][color=#000000][color=#000000]	[/color][color=#666600][[[/color][/color][color=#B41CA4][color=#000088]self[/color][/color][color=#000000][color=#000000] [/color][/color][color=#000000]navigationController[/color][color=#000000][color=#666600]][/color][color=#000000] [/color][/color][color=#000000]setToolbarHidden[/color][color=#000000][color=#666600]:[/color][/color][color=#B41CA4][color=#000000]NO[/color][/color][color=#000000][color=#000000] [/color][/color][color=#000000]animated[/color][color=#000000][color=#666600]:[/color][/color][color=#B41CA4][color=#000000]NO[/color][/color][color=#000000][color=#666600]];[/color][/color][/color]<br />
[color=#7134AA][color=#000000][color=#000000]	[/color][/color][color=#B41CA4][color=#000088]self[/color][/color][color=#000000][color=#666600].[/color][/color][color=#000000]navigationController[/color][color=#000000][color=#666600].[/color][/color][color=#000000]navigationBar[/color][color=#000000][color=#666600].[/color][/color][color=#000000]barStyle[/color][color=#000000][color=#666600]=[/color][/color][color=#401082][color=#660066]UIBarStyleBlack[/color][/color][color=#000000][color=#666600];[/color][/color][/color]<br />
[color=#7134AA][color=#000000][color=#000000]	[/color][/color][color=#B41CA4][color=#000088]self[/color][/color][color=#000000][color=#666600].[/color][/color][color=#000000]navigationController[/color][color=#000000][color=#666600].[/color][/color][color=#000000]toolbar[/color][color=#000000][color=#666600].[/color][/color][color=#000000]barStyle[/color][color=#000000][color=#666600]=[/color][/color][color=#401082][color=#660066]UIBarStyleBlack[/color][/color][color=#000000][color=#666600];
[/color]





et je souhaiterais pourvoir rajouter des UITabBarItem dans ma toolBar:



UITabBarItem[/color][/color][color=#000000][color=#000000] [/color][color=#666600]*[/color][color=#000000]homeButton [/color][color=#666600]=[/color][color=#000000] [/color][color=#666600][[[/color][/color][color=#7134AA][color=#660066]UITabBarItem[/color][/color][color=#000000][color=#000000] [/color][/color][color=#000000]alloc[/color][color=#000000][color=#666600]][/color][color=#000000] [/color][/color][color=#000000]initWithTitle[/color][color=#000000][color=#666600]:[/color][/color][color=#C72C25][color=#666600]@[/color][color=#008800]&quot;Home&quot;[/color][/color][color=#000000][color=#000000] [/color][/color][color=#000000]image[/color][color=#000000][color=#666600]:[[/color][/color][color=#7134AA][color=#660066]UIImage[/color][/color][color=#000000][color=#000000] [/color][/color][color=#000000]imageNamed[/color][color=#000000][color=#666600]:[/color][/color][color=#C72C25][color=#666600]@[/color][color=#008800]&quot;home.png&quot;[/color][/color][color=#000000][color=#666600]][/color][color=#000000] [/color][/color][color=#000000]tag[/color][color=#000000][color=#666600]:[/color][/color][color=#3D01D9][color=#006666]0[/color][/color][color=#000000][color=#666600]];[/color][/color]<br />
[color=#7134AA][color=#000000]	[/color][color=#7134AA][color=#660066]UITabBarItem[/color][/color][color=#000000] [/color][color=#666600]*[/color][color=#000000]actionButton [/color][color=#666600]=[/color][color=#000000] [/color][color=#666600][[[/color][color=#7134AA][color=#660066]UITabBarItem[/color][/color][color=#000000] [/color][color=#401082][color=#000000]alloc[/color][/color][color=#666600]][/color][color=#000000] [/color][color=#401082][color=#000000]initWithTitle[/color][/color][color=#666600]:[/color][color=#C72C25][color=#666600]@[/color][color=#008800]&quot;Action&quot;[/color][/color][color=#000000] [/color][color=#401082][color=#000000]image[/color][/color][color=#666600]:[[/color][color=#7134AA][color=#660066]UIImage[/color][/color][color=#000000] [/color][color=#401082][color=#000000]imageNamed[/color][/color][color=#666600]:[/color][color=#C72C25][color=#666600]@[/color][color=#008800]&quot;Action.png&quot;[/color][/color][color=#666600]][/color][color=#000000] [/color][color=#401082][color=#000000]tag[/color][/color][color=#666600]:[/color][color=#3D01D9][color=#006666]1[/color][/color][color=#666600]];






Du coup j'ai deux question, comment spécifié une action spécifique à  chaque tabBarItem? Et surtout comment les affecter à  ma toolBar ?

Réponses

  • AliGatorAliGator Membre, Modérateur
    juin 2012 modifié #2
    Un UITarBarItem, comme son nom l'indique, est un item qui se loge dans une UITabBar.

    Dans une UIToolBar on met des UIBarButtonItems.



    C'est même indiqué dès les 2 premières lignes de la documentation Apple de UIToolBar (partie "Overview"), que je t'invite à  relire, car elle répond aussi à  ta question dès ces 2 premières lignes en expliquant comment ajouter des éléments à  ta ToolBar...
  • D'accord, et du coup imaginons que je veux mettre en place des UITabBarItem dans une UITabBar, comment s'y prendre ?
  • AliGatorAliGator Membre, Modérateur
    Heu... en lisant la doc ?
  • J'ai esseyé de regarder des articles à  droite ç et à  gauche et tous traite leur tarBarItem avec des viewController. Or je souhaiterais pourvoir avec des tabBarItem qui génère des action spécifique au viewController qui les supporte, sans nécessité le besoin d'afficher un viewController.
  • Sachant que je ne souhaite pas utiliser Interface Builder
  • iDevKenoiDevKeno Membre
    juin 2012 modifié #7
    Pas sûr d'avoir tout compris, m'enfin voilà .

    (UIViewController embed dans un UINavigationController)


    <br />
    	UIBarButtonItem *barButtonItemUn = [[UIBarButtonItem alloc] initWithTitle:@&quot;Bouton un&quot; style:UIBarButtonItemStyleDone target:self action:@selector(methodActionBoutonUn:)];<br />
    	UIBarButtonItem *barButtonItemDeux = [[UIBarButtonItem alloc] initWithTitle:@&quot;Bouton deux&quot; style:UIBarButtonItemStyleDone target:self action:@selector(methodActionBoutonDeux:)];<br />
      <br />
    	NSArray *arrayBouton = [[NSArray alloc] initWithObjects:barButtonItemUn,barButtonItemDeux, nil];<br />
    	self.toolbarItems = arrayBouton;<br />
    	self.navigationController.toolbarHidden = NO;<br />
    
  • yass_1988yass_1988 Membre
    juin 2012 modifié #8
    En faite c'est pas un toolBar (qui contient des BarButtons) mais un tabBar contenant des tabBarItem.

    Dans les articles trouvé sur internet, il traitent tous l'exemple avec des tabBarItem contenent des viewController (Exemple d'application permettant de choisir entre plusieurs vues via les tabBarItem), or moi je souhaiterais plutôt engendré une action spécifique à  mon viewController qui implémente le taBar.
  • iDevKenoiDevKeno Membre
    juin 2012 modifié #9
    Soit, si j'ai bien compris, essaye ça :



    Dans ton interface
    1. Implémente le protocole UITabBarDelegate
    2. Déclare une propriété UITabBar


    Dans ton implémentation
    1. Synthétise ta propriété
    2. Lors de viewDidLoad, initialise et ajoute ta tabBar

    <br />
    	tabBar = [[UITabBar alloc] initWithFrame:CGRectMake(0, 411, 320, 49)];<br />
    	UITabBarItem *tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemMore tag:0];<br />
    	UITabBarItem *tabBarItemDeux = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemSearch tag:1];<br />
      <br />
    	tabBar.items = [NSArray arrayWithObjects:tabBarItem,tabBarItemDeux, nil];<br />
    	tabBar.delegate = self;<br />
    	[self.view addSubview:tabBar];<br />
    




    3. Ensuite implémente la méthode suivante et utilise les tag pour différencier le traitement


    <br />
    - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {<br />
    	if([item tag] == 0) {<br />
    		[self performSelector:@selector(methodUne)];<br />
    	}<br />
    	else {<br />
    		[self performSelector:@selector(methodDeux)];<br />
    	}<br />
    }<br />
    




    Je ne sais pas si Apple accepterait m'enfin...



    Bonne journée
  • Bon j'ai mis tout cela en place, je RUN, pas d'avertissement, pas de Warning, mais rien ne s'affiche image/sad.png' class='bbc_emoticon' alt=':(' />
  • iDevKenoiDevKeno Membre
    juin 2012 modifié #11
    Heu...



    Tu as bien implémenté le protocole UITabBarDelegate dans ton .h ?
    <br />
    @interface ViewController : UIViewController &lt;uitabbardelegate&gt;<br />
    




    et déclaré une propriété UITabBar ?
    <br />
    @property (nonatomic, retain) UITabBar *tabBar;<br />
    




    Quoique ça ne changerai rien.



    J'ai testé en créant une application SingleView toute simple et ça fonctionne.
  • Oui


    [color=#b41ca4]@interface[/color][color=#000000] AppViewController : [/color]NRGridViewController[color=#000000]&lt;[/color]NRGridViewDelegate[color=#000000],[/color][color=#7134aa]UITabBarDelegate[/color][color=#000000]&gt;
    
    [/color]

    [/color]@property[color=#000000] ([/color]nonatomic[color=#000000], [/color]retain[color=#000000]) [/color][color=#7134aa]UITabBar[/color][color=#000000] *tabBar;
    


    [/color]@synthesize[color=#000000] tabBar;
    
  • NRGridViewController : UIViewController



    NRGridView est un framework que j'utilise pour avoir une vue qui me permet d'afficher des éléments dans une grille
  • Difficile de t'aider plus sur ce sujet, je ne l'ai jamais utilisé.

    Sinon poste ta méthode viewDidLoad pour voir



    Bonne journée
  • <br />
    <br />
    - ([color=#b41ca4]void[/color])viewDidLoad<br />
    {[color=#401082]<br />
    [color=#000000]    [[/color][color=#b41ca4]super[/color][color=#000000] [/color]viewDidLoad[color=#000000]];[/color][/color]<br />
    [color=#401082]<br />
    [color=#000000]    [[[/color][color=#b41ca4]self[/color][color=#000000] [/color]navigationController[color=#000000]] [/color]setNavigationBarHidden[color=#000000]:[/color][color=#b41ca4]NO[/color][color=#000000] [/color]animated[color=#000000]:[/color][color=#b41ca4]NO[/color][color=#000000]];[/color][/color][color=#7134aa]<br />
    [color=#000000]    [/color][color=#b41ca4]self[/color][color=#000000].[/color]navigationController[color=#000000].[/color]navigationBar[color=#000000].[/color]barStyle[color=#000000]=[/color][color=#401082]UIBarStyleBlack[/color][color=#000000];[/color][/color]<br />
    [color=#7134aa]<br />
    [color=#000000]    [/color]UIBarButtonItem[color=#000000] *formButton = [[[/color]UIBarButtonItem[color=#000000] [/color][color=#401082]alloc[/color][color=#000000]][/color][/color]<br />
                                       [color=#401082]initWithTitle[/color]:[color=#c72c25]@&quot;Form&quot;[/color]<br />
                                       [color=#401082]style[/color]:[color=#401082]UIBarButtonItemStyleBordered[/color]<br />
                                       [color=#401082]target[/color]:[color=#b41ca4]self[/color]<br />
                                       [color=#401082]action[/color]:[color=#b41ca4]@selector[/color](accesForm1)];[color=#7134aa]<br />
    [color=#000000]    [/color][color=#b41ca4]self[/color][color=#000000].[/color]navigationItem[color=#000000].[/color]rightBarButtonItem[color=#000000]=formButton;[/color][/color]<br />
    [color=#401082]<br />
    [color=#000000]    [/color][color=#b41ca4]if[/color][color=#000000]([[[/color][color=#b41ca4]self[/color][color=#000000] [/color][color=#38595d]path[/color][color=#000000]] [/color]isEqualToString[color=#000000]:[/color][color=#c72c25]@&quot;/&quot;[/color][color=#000000]])[/color][/color]<br />
        {[color=#7134aa]<br />
    [color=#000000]        [/color][color=#b41ca4]self[/color][color=#000000].[/color]navigationItem[color=#000000].[/color]hidesBackButton[color=#000000]=[/color][color=#b41ca4]YES[/color][color=#000000];[/color][/color]<br />
        }[color=#b41ca4]else[/color]<br />
        {<br />
            [color=#7134aa]UIBarButtonItem[/color] *previousButton = [[[color=#7134aa]UIBarButtonItem[/color] [color=#401082]alloc[/color]]<br />
                                               [color=#401082]initWithTitle[/color]:[color=#c72c25]@&quot;Preview&quot;[/color]<br />
                                               [color=#401082]style[/color]:[color=#401082]UIBarButtonItemStyleBordered[/color]<br />
                                               [color=#401082]target[/color]:[color=#b41ca4]self[/color]<br />
                                               [color=#401082]action[/color]:[color=#b41ca4]@selector[/color](accesPrevious)];[color=#7134aa]<br />
    [color=#000000]        [/color][color=#b41ca4]self[/color][color=#000000].[/color]navigationItem[color=#000000].[/color]leftBarButtonItem[color=#000000]=previousButton;[/color][/color]<br />
        } <br />
    <br />
        [color=#578187]tabBar[/color][color=#000000] = [[[/color][color=#7134AA]UITabBar[/color][color=#000000] [/color]alloc[color=#000000]] [/color]initWithFrame[color=#000000]:[/color]CGRectMake[color=#000000]([/color][color=#3D01D9]0[/color][color=#000000], [/color][color=#3D01D9]411[/color][color=#000000], [/color][color=#3D01D9]320[/color][color=#000000], [/color][color=#3D01D9]49[/color][color=#000000])];[/color][color=#1C8600]<br />
    [color=#000000]    [/color]UITabBarItem *tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemMore tag:0];[/color][color=#1C8600]<br />
        UITabBarItem *tabBarItemDeux = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemSearch tag:1];[/color]<br />
    [color=#1C8600]<br />
    [color=#000000]    [/color]tabBar.items = [NSArray arrayWithObjects:tabBarItem,tabBarItemDeux, nil];[/color]<br />
        [color=#578187]tabBar[/color].[color=#7134AA]delegate[/color] = [color=#B41CA4]self[/color];<br />
        [[color=#B41CA4]self[/color].[color=#7134AA]view[/color] [color=#401082]addSubview[/color]:[color=#578187]tabBar[/color]];<br />
    <br />
    }
    
  • iDevKenoiDevKeno Membre
    juin 2012 modifié #16
    Mea culpa, j'ai oublié que tu avais un navigation contrôleur.

    Il te faut soustraire la hauteur de la barre, soit 44 pts.



    Remplace cette ligne
    <br />
    tabBar = [[UITabBar alloc] initWithFrame:CGRectMake(0, 411, 320, 49)];<br />
    


    par
    <br />
    tabBar = [[UITabBar alloc] initWithFrame:CGRectMake(0, 367, 320, 49)];<br />
    
  • yeapppppppppp
  • Merci image/wink.png' class='bbc_emoticon' alt=';)' />
  • Heuuuu, par contre un dernier petit soucis de détail, comme je fais une rotation horizontal, ma tolBar disparait ??



    Est-ce que mes dimension sont pas bon ?
  • Cela serait plus simple d'utiliser IB quand même, m'enfin.

    Il faut redimensionner ta barre à  chaque rotation.

    Essaye quelque chose du genre :
    <br />
    - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {<br />
        if([[UIDevice currentDevice] userInterfaceIdiom] == UIInterfaceOrientationLandscapeLeft|| [[UIDevice currentDevice] userInterfaceIdiom] == UIInterfaceOrientationLandscapeRight)<br />
        {<br />
    	    tabBar = [[UITabBar alloc] initWithFrame:CGRectMake(0, 207, 480, 49)];<br />
        }<br />
        else {<br />
    	    tabBar = [[UITabBar alloc] initWithFrame:CGRectMake(0, 367, 320, 49)];<br />
        }<br />
    }<br />
    
  • AliGatorAliGator Membre, Modérateur
    Ou mieux, utiliser les autoresizingMask

    (Ou encore mieux, utiliser IB qui t'évitera une palanquée de lignes de code ^^)
  • Bon, après avoir tester, j'ai relevé un gros problème, quand je scroll, ma tabBar scrolle avec !!!!

    C'est normal image/huh.gif' class='bbc_emoticon' alt='???' />
  • Problème réglé avec:

    [[self navigationController].view addSubview:tabBAr];
  • yass_1988yass_1988 Membre
    juin 2012 modifié #24
    Bon sinon avec ma solution, la tablar disparait vraiment quand je réalise une rotation horizontal
  • yass_1988yass_1988 Membre
    juin 2012 modifié #25
    Bonjour,



    voila ou j'en suis, dans mon viewController et comme j'utilise une UINavigationController, j'ai voulu mettre en place une UItabBar. Donc dans mon viewDidLoad voila comment j'ai procédé:


    <br />
    tabBar = [[UITabBar alloc] initWithFrame:CGRectMake(0, 431, 320, 49)];<br />
    	UITabBarItem *homeButton = [[UITabBarItem alloc] initWithTitle:@&quot;Home&quot; image:[UIImage imageNamed:@&quot;home.png&quot;] tag:0];<br />
    	UITabBarItem *actionButton = [[UITabBarItem alloc] initWithTitle:@&quot;Action&quot; image:[UIImage imageNamed:@&quot;Action.png&quot;] tag:1];<br />
    	UITabBarItem *multipleSelectedButton = [[UITabBarItem alloc] initWithTitle:@&quot;Multiple&quot; image:[UIImage imageNamed:@&quot;multipleSelected.png&quot;] tag:2];<br />
    	UITabBarItem *shareButton = [[UITabBarItem alloc] initWithTitle:@&quot;Partager&quot; image:[UIImage imageNamed:@&quot;share.png&quot;] tag:3];<br />
    	UITabBarItem *previousButton = [[UITabBarItem alloc] initWithTitle:@&quot;Retour&quot; image:[UIImage imageNamed:@&quot;previous.png&quot;] tag:4];<br />
    	tabBar.items = [NSArray arrayWithObjects:homeButton,actionButton,multipleSelectedButton,shareButton,previousButton, nil];<br />
    	tabBar.delegate = self;<br />
    	[[self navigationController].view addSubview:tabBar];<br />
    




    E pour éviter les problèmes lors d'une rotation de l'écran, j'utilise cette méthode:


    <br />
    (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {<br />
    	if([[UIDevice currentDevice] userInterfaceIdiom] == UIInterfaceOrientationLandscapeLeft|| [[UIDevice currentDevice] userInterfaceIdiom] == UIInterfaceOrientationLandscapeRight)<br />
    	{<br />
    		tabBar = [[UITabBar alloc] initWithFrame:CGRectMake(0, 271, 480, 49)];<br />
    	}<br />
    	else {<br />
    		tabBar = [[UITabBar alloc] initWithFrame:CGRectMake(0, 431, 320, 49)];<br />
    	}<br />
    }
    




    Le soucis est que quand je suis en mode portrait, ma tabBar s'affiche correctement à  la position voulu, mais quand je suis en mode paysage, ma tabBar disparait.



    Une solution à  mon problème ?
  • CéroceCéroce Membre, Modérateur
    juin 2012 modifié #26
    Pourquoi crées-tu une nouvelle tabbar ? Tu n'as qu'à  changer sa frame.

    Mais en fait, il faut d'utiliser l'autoresizingMask comme conseillé par Ali.
Connectez-vous ou Inscrivez-vous pour répondre.