2010-06-01 20 views
18

Tengo una aplicación con un controlador de barra de pestañas y cada vista contiene un controlador de navegación. Mi MainWindow se ve de la siguiente manera: alt text http://www.freeimagehosting.net/image.php?7bc867a594.pngCómo ocultar la barra de pestañas principal al presionar el controlador en navigationController

Todo funciona bien tal como está, pero noté un problema al presionar una vista de detalles en el controlador de navegación. En el didSelectRowAtIndexPath para un tableviewcontroller que pertenece al controlador de la barra de pestañas (la llamada más reciente en la imagen) que estoy haciendo esto:

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

}

El ArticleViewController tiene su propia barra de pestañas, ya que tiene que mostrar cosas diferentes. El problema es que cuando presiono ArticleViewController en el navigationController, veo ambas barras de pestañas en la parte inferior de la vista. ¿Hay alguna manera de que pueda resolver este problema?

Gracias de antemano

Respuesta

61

Después de pasar horas y publicar una pregunta aquí he encontrado que la solución a este problema es añadir la siguiente línea después de la creación de instancias de ArticleController.

articleController.hidesBottomBarWhenPushed = YES; 
+1

Muchas gracias! Esto funciona como el encanto! ¡Me has alegrado el día! – Tommy

+0

la nota importante se estableció 'hidesBottomBarWhenPushed' inmediatamente después de crear targetViewController –

7

Una solución muy sencilla:

destinationViewController.hidesBottomBarWhenPushed = YES; 

En su caso:

articleController.hidesBottomBarWhenPushed = YES; 

Espero que esto ayude!

17

Si prefiere la configuración del guión gráfico sobre la codificación, hay un botón para eso. Sólo tienes que ir destinationViewController> Atributo Inspector:

enter image description here

+1

No estoy seguro de por qué se votó negativamente, pero esto funcionó para mí. – iSee

0

Puede añadir a continuación el código en el controlador de vista, lo que usted está empujando.

-(BOOL)hidesBottomBarWhenPushed 
{ 
    return YES; 
} 

Esto ocultará la barra de pestañas en el controlador de vista empujado solamente y como el pop de la barra de pestañas controlador de vista permanece en Mostrar en reposo todos los controladores de vista.

versión Swift (3.x y por encima)

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

Gracias

0

para SWIFT 3, escribir el mismo código por el que mostrar la barra de pestañas antes del código pushviewController, como a continuación

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) 

o use solo lo que quiere para mostrar la barra de pestañas, puede usar

viewController.hidesBottomBarWhenPushed = false 
0

enter image description here

Ir a Interface Builder en Xcode -> atributo abierta inspector y activa el comando 'Ocultar barra inferior Push' de controlador de vista que no desea mostrar la barra de pestañas. ¡¡Funcionará!!

1

Puede ocultar la barra de pestañas principal a través del guión gráfico.

Seleccionar viewcontroller>atributo inspector>chequeOcultar barra inferior de empuje

Cuestiones relacionadas