ios objective-c iphone

ios - Controlador de vista push/pop con barra de navegación desde controlador de vista sin barra de navegación



objective-c iphone (2)

Estoy tratando de presionar un controlador de vista con una barra de navegación visible desde un controlador de vista con una barra de navegación oculta.

Intenté todo tipo de combinaciones de [[self navigationController] setNavigationBarHidden:YES animated:NO]; en viewWillAppear, viewDidAppear, viewWillDisappear ... etc.

// First View Controller @implementation FirstViewController - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[self navigationController] setNavigationBarHidden:YES animated:NO]; NSLog(@"[%@ viewWillAppear]", self); } @end // Second View Controller @implementation SecondViewController - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[self navigationController] setNavigationBarHidden:NO animated:NO]; NSLog(@"[%@ viewWillAppear]", self); } @end

Nada funcionó. También probé el código personalizado para "animar" un push y pop, que funciona, PERO pierdo el borde deslizar y ver el panorama. Antes de profundizar, solo quiero asegurarme de que no estoy reinventando la rueda.

La aplicación de Starbucks es lo que estoy tratando de imitar.

El controlador de la vista raíz de la aplicación (la vista de fondo oscuro) está en pantalla completa y se da cuenta de que no tiene una barra de UINavigation. Pero cuando toca uno de los botones, presiona un controlador de vista (la vista de fondo claro) CON una barra de navegación de UIN. A partir de ahí, si toca la flecha "Atrás", verá los controles emergentes con la barra de navegación. El gesto de barrido pop interactivo también funciona.


Acabo de configurar dos controladores de vista para probar esto de un lado a otro.

@interface VC1 () @end @implementation VC1 - (void)viewDidLoad { [super viewDidLoad]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.navigationController.navigationBarHidden = YES; } @end

y un segundo

#import "ViewControllerTwo.h" @interface ViewControllerTwo () @end @implementation ViewControllerTwo - (void)viewDidLoad { [super viewDidLoad]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.navigationController.navigationBarHidden = NO; } @end

VC1 está incrustado en un navigationController (que es el controlador raíz de la aplicación), con un botón que navega a ViewControllerTwo. Tengo un segmento de inserción de VC1 -> ViewControllerTwo, este método funciona. Cuando toco el botón, el controlador de vista está visible en ViewControllerTwo, cuando presiono hacia atrás, la barra de navegación desaparece.


Es posible sin piratear juntos una solución por ti mismo. Aquí está lo que haces:

Tu controlador de vista raíz:

@implementation ViewController .... - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:animated]; } @end

Y el viewController empujado:

@implementation SecondViewController - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:NO animated:animated]; } @end

Esto lo hara. También mantiene funcionando la transición interactiva;)

Me parece inquietante, sin embargo, que este tipo de funcionalidad no esté documentado en absoluto por Apple. - También puede ocultar y mostrar las barras de herramientas con estos ''puntos de llamada'' (dentro de viewWillAppear :)

EDITAR

Acabo de darme cuenta de que este es el mismo código que escribiste en tu pregunta. Por favor, pruébalo de nuevo. Estoy 100% seguro de que esto funciona; también utilicé esta funcionalidad en una de mis aplicaciones.

Tenga en cuenta también que mi código utiliza animated:animated lugar de su animated:NO . Este puede ser el punto crucial aquí :)