2011-06-06 15 views
11

así que creé una UINavigationController manualmente, configurarlo como mi RootViewController de UIWindow, y me gustaría utilizar un botón de retroceso para salir del UINavigationController y cargar otro viewController en su lugar. Sin embargo, el backItem propiedad del UINavigationBar es de sólo lectura , así que no sé cómo configurarlo correctamente (que es de sólo lectura y por defecto a cero 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 presionando el botón Atrás en la vista raíz).Haciendo botón de retroceso de vista raíz en UINavigationController

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

EDIT:

Intento de Legolas solución 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]; 

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

+1

LOL. FYI. ¡Copié tu código EXACTAMENTE y funciona! Vaya al método ViewDidLoad de su vista particular. pon esas tres cosas que he pegado. – Legolas

Respuesta

15

Puede hacerlo con un enfoque diferente.

Ir al método:

- (void)viewDidLoad 

ocultar el botón de vuelta con

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

Crear un nuevo UIButton o una UIBarButtonItem, y lo coloca en lugar del botón de retroceso.

continuación, puede utilizar una acción cuando se hace clic en el botón

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

Actualización de mi respuesta: Utilice este método en el 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; 
+0

Bien, ¿pero no ocultar el botón Atrás ocultarlo también para las subvistas? Quiero usarlo allí, y solo me gustaría salir de la vista raíz –

+0

No sé cómo ha creado nuevas vistas ya que no ha publicado ningún código sobre cómo funciona la aplicación. Pero no creo que lo oculte para todas las subvistas. Use esta idea y cree este botón solo para la vista que está buscando para salir. No estaría de más intentarlo [self.navigationItem setHidesBackButton: YES animated: YES]; en una vista y experimentarlo :) – Legolas

+0

brb, testing :) –

0

tratar dis: -

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

Hay algunos enfoques que se me ocurren.

  1. utilizar su propio icono de botón "atrás" de su propio diseño, o un defecto del sistema. Use leftBarButtonItem.
  2. Haga una imagen del icono predeterminado. Nuevamente, use leftBarButtonItem.
  3. Cree una vista de raíz falsa que inserte 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 manera, nunca verá UINavigationController sin un botón de retroceso. Lo he probado (pero no lo he perfilado); el impacto en el rendimiento parece insignificante.

Además, echa un vistazo a < https://discussions.apple.com/message/8298537#8298537> a partir de 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 respondió:

para hacer lo que quiere hacer, el truco es poner el controlador de "super-raíz" en el interior del mando de navegación, pero tengo configurado navigationBarHidden del controlador de navegación propiedad a SÍ en la vista aparecerá y NO en vista desaparecerá. (Para puntos de bonificación, anímela cuando sea apropiado.)

Cuestiones relacionadas