bar objective-c ios uinavigationcontroller

objective-c - uinavigationbar ios



Haciendo retroceder el botón para ver la raíz en UINavigationController (3)

prueba dis: -

UIBarButtonItem *leftBarButton = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStylePlain target:self action:@selector(initializeStuff)]; [self.navigationItem setleftBarButtonItem:leftBarButton]; [leftBarButton release];

Así que creé un UINavigationController manualmente, lo configuré como el RootViewController de mi UIWindow , y me gustaría usar un botón Atrás para salir del UINavigationController y cargar otro viewController en su lugar. Sin embargo, la propiedad backItem de UINavigationBar es de solo lectura , por lo que no sé cómo configurarla correctamente (es de solo lectura y la predeterminada es nula en la vista de navegación de la raíz). Cómo puedo lograr esto (o un efecto similar, quiero poder "salir" de este UINavigationController al presionar el botón Atrás en la vista raíz).

Alternativamente, ¿es esta mala forma? ¿Cómo debería escapar de la vista raíz de un UINavigationController ?

EDITAR:

Intento la solución de Legolas con el siguiente código: (algunos nombres han sido cambiados)

UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:plvc]; // plvc being the first viewcontroller MyAppDelegate* appDelegate = [Utility getAppDelegate]; appDelegate.window.rootViewController = navController; UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Start" style:UIBarButtonItemStyleBordered target:self action:@selector(initializeStuff)]; navController.navigationItem.leftBarButtonItem = backButton; [navController.navigationItem setHidesBackButton:YES animated:YES]; [navController.view setNeedsDisplay];

Pero el botón no se muestra. ¿Qué estoy haciendo mal? Los otros botones de retroceso se muestran correctamente, pero este aún no.


Puedes hacer esto en un enfoque diferente.

Ir al método:

- (void)viewDidLoad

Ocultar el botón Atrás con

[self.navigationItem setHidesBackButton:YES animated:YES];

Cree un UIButton nuevo o un UIBarButtonItem y colóquelo en lugar del botón Atrás.

Luego puede usar una acción cuando hace clic en el botón

- (IBAction) clickBackButton : (id) sender; //and push view controller to your required view.

Actualizando mi respuesta: Usar esto en el método viewDidLoad // funciona como un encanto //

[self.navigationItem setHidesBackButton:YES animated:YES]; UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Start" style:UIBarButtonItemStyleBordered target:self action:@selector(initializeStuff)]; self.navigationItem.leftBarButtonItem = backButton;


Hay algunos enfoques que puedo pensar.

  1. Use su propio ícono de "botón de retroceso" de su propio diseño o un valor predeterminado del sistema. Use leftBarButtonItem .
  2. Haz una imagen del icono predeterminado. Nuevamente, use leftBarButtonItem .
  3. Cree una vista de raíz falsa que UINavigationController en la pila UINavigationController . El único propósito de esta vista raíz será iniciar la vista secundaria o morir cuando el usuario regrese a ella. De esta forma, nunca verás UINavigationController sin un botón de retroceso. Lo he probado (pero no lo he perfilado); el impacto en el rendimiento parece insignificante.

Además, consulte < https://discussions.apple.com/message/8298537#8298537 > desde 2008. La misma pregunta.

El problema es, ¿cómo sale el usuario de un UINavigationController y vuelve a la aplicación? La barra de navegación raíz no tiene un botón de retroceso ni ningún tipo de gancho para salir.

A lo que alguien contestó:

Para hacer lo que quiere hacer, el truco es poner el controlador "superraíz" dentro del controlador de navegación, pero hacer que establezca la propiedad navigationBarHidden del controlador de navegación en SÍ en la vista Aparecerá y NO en la vista Desaparecerá. (Para los puntos de bonificación, anímalo cuando sea apropiado).