2010-06-01 3 views
18

J'ai une application avec un contrôleur de barre d'onglets et chaque vue contient un contrôleur de navigation. Mon MainWindow ressemble à ceci: alt text http://www.freeimagehosting.net/image.php?7bc867a594.pngComment cacher TabBar parent lorsque le contrôleur poussant NavigationController

Tout fonctionne très bien, mais j'ai remarqué un problème en poussant une vue détaillée vers le contrôleur de navigation. Dans le didSelectRowAtIndexPath pour une tableviewcontroller qui appartient au contrôleur de barre d'onglets (celui appelé Dernières dans l'image) que je fais ceci:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
ArticleViewController *articleController = [[ArticleViewController alloc] initWithNibName:@"ArticleView" bundle:nil]; 

[self.navigationController pushViewController:articleController animated:YES]; 

[articleController release]; 
articleController = nil; 

}

Le ArticleViewController a sa propre barre d'onglets, car il a besoin d'afficher différentes choses. Le problème est que quand j'appuie le ArticleViewController dans la navigationController je vois les deux tabs au bas de la vue. Est-ce que je peux résoudre ce problème?

Merci à l'avance

Répondre

61

Après avoir passé des heures et de poster une question ici, je trouve que la solution à ce problème ajoute la ligne suivante après l'instanciation de ArticleController.

articleController.hidesBottomBarWhenPushed = YES; 
+1

Merci beaucoup! Cela fonctionne comme le charme! Tu as fait ma journée! – Tommy

+0

la note importante a été définie 'hidesBottomBarWhenPushed' immédiatement après la création de targetViewController –

7

Une solution très simple:

destinationViewController.hidesBottomBarWhenPushed = YES; 

Dans votre cas:

articleController.hidesBottomBarWhenPushed = YES; 

Hope this helps!

17

Si vous préférez la configuration storyboard au codage il y a une bascule pour cela. Il suffit d'aller destinationViewController> Inspecteur d'attributs:

enter image description here

+1

Je ne sais pas pourquoi cela a été refusé, mais cela a fonctionné pour moi. – iSee

0

Vous pouvez ajouter ci-dessous le code dans le contrôleur de vue, que vous poussez.

-(BOOL)hidesBottomBarWhenPushed 
{ 
    return YES; 
} 

Cela permet de masquer la barre d'onglets dans le contrôleur de vue poussé seulement et que vous pop le contrôleur de vue reste TabBar unhide dans tous les autres contrôleurs de vue.

Version Swift (3.x et ci-dessus)

override var hidesBottomBarWhenPushed: Bool { 
    get { 
     return navigationController?.topViewController == self 
    } 
    set { 
     super.hidesBottomBarWhenPushed = newValue 
    } 
} 

Merci

0

pour 3 rapide, écrire le même code par vous unhide TabBar avant le code pushviewController comme ci-dessous

var frame = self.tabBarController?.tabBar.frame 
    frame?.origin.y = self.view.frame.size.height - (frame?.size.height)!+112 
    UIView.animate(withDuration: 0.2, animations: { 
     self.tabBarController?.tabBar.frame = frame! 
    }) 
    self.navigationController?.pushViewController(viewController, animated: true) 

ou utiliser juste whant pour afficher la barre d'onglets vous pouvez utiliser

viewController.hidesBottomBarWhenPushed = false 
0

enter image description here

Aller à Interface Builder dans Xcode -> Inspecteur d'attributs ouvert et cochez « Masquer la barre du bas Push » pour le contrôleur de vue que vous ne voulez pas afficher la barre d'onglet. Ça va marcher!!

1

Vous pouvez simplement masquer les onglets parents via le storyboard.

Sélectionnez viewcontroller>Attribut Inspecteur>checkCacher la barre du bas Push

Questions connexes