2012-07-01 19 views
11

Aquí está mi código. Quiero poner un botón de retroceso en la apertura de rootviewController.¿Cómo mostrar el botón Atrás en RootViewController del UINavigationController?

- (void)selectSurah:(id)sender { 

    SurahTableViewController * surahTableViewController = [[SurahTableViewController alloc] initWithNibName:@"SurahTableViewController" bundle:nil]; 
    [email protected]"Surah"; 

    s[email protected]"Back"; 

    UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:surahTableViewController]; 

    [self presentModalViewController:aNavigationController animated:YES]; 
} 
+0

¿Para volver a dónde? – jarryd

+2

La respuesta es obvia. Regresa donde se llama al presentModalViewController. Ver @Flex_Addicted respuesta a continuación. – shaikh

Respuesta

8

No creo que es posible hacer estallar el controlador de vista raíz de la pila de navegación, pero se puede fingir con un UIButton agregado como la vista personalizada de un UIBarButtonItem:

UIButton *b = [[UIButton alloc]initWithButtonType:UIButtonTypeCustom]; 
[b setImage:[UIImage imageNamed:@"BackImage.png"] forState:UIControlStateNormal]; 
[b addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside]; 
self.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:b]; 

Un PSD adecuada de Los elementos de la IU de iOS se pueden encontrar en here.

+0

gracias por el enlace PSD. – shaikh

2

apariencia y el comportamiento de un botón de retroceso en un UINavigationController se basa en la interacción entre una pila de UINavigationControllers. Poner un botón Atrás en el primer controlador rompe esta convención, no hay nada a lo que recurrir, y es por eso que su código no funciona.

Usted tendrá que añadir manualmente UIBarButtonItem al código de barras título como:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(back:)]; 

Si realmente quiere que se vea como un botón de retroceso, tendrá que crear manualmente el UIBarButtonItem con una imagen eso refleja el botón Atrás.

Otra sugerencia, ya que parece que está intentando usar un botón Atrás para descartar un controlador de vista modal, me quedaría con algo más convencional como un botón "Cerrar" o "Listo" para cerrar la vista modal controlador. Un botón de retroceso es realmente más apropiado para navegar una pila de UINavigationControllers.

+1

+1 para la sugerencia de etiqueta 'Cerrar' o 'Hecho'. gracias – shaikh

4

Dado que el SurahTableViewController es un controlador de vista raíz en un controlador de navegación, no puede volver a la raíz porque ya está allí. Puesto que has presentado de forma modal de otra cosa, hay que poner un botón en la barra de navegación que tiene un IBAction que se pide:

[self dismissModalViewControllerAnimated:YES]; 
5

Faizan,

Helium3 comentario tiene sentido.

Supongo que su botón es necesario para cerrar el controlador presentado de forma modal, ¿es cierto? Correcto si estoy equivocado

Si es así, puede simplemente crear un nuevo UIBarButtonItem y establecer es un botón izquierdo (o derecho) para el UINavigationControllernavigationItem. Para no romper la encapsulación, créela en el método viewDidLoad para tu controlador SurahTableViewController.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // make attention to memory leak if you don't use ARC!!! 
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close" 
      style:UIBarButtonItemStyleBordered 
      target:self 
      action:@selector(close:)]; 
} 

-(void)close:(id)sender 
{ 
    // to dismiss use dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion 
    // dismissModalViewControllerAnimated: is deprecated 

    [self dismissViewControllerAnimated:YES completion:^{ NSLog(@"controller dismissed"); }]; 
} 
+0

esa es una respuesta perfecta. funciona súper bien. – shaikh

+0

Perdón por resucitar el dead (thread), pero solo una nota: ¡debería agregar el botón al UIViewController que se presenta en el UINavigationController, no al UINavigationController mismo! Esto me hizo perder una hora más o menos :( – MacD

+0

@MadD Disculpa la demora. ¿Qué quieres decir? El botón está conectado a la barra de navegación. ¿Por qué no funciona para ti? Gracias de antemano. –

Cuestiones relacionadas