2012-06-26 22 views
5

He hecho que la barra de navegación (barra superior) aparezca/desaparezca cuando toco la pantalla, y también sobre la imagen de fondo. Funcionó, pero con un problema: ¡de repente tengo dos barras de navegación! Primero, uno con un botón de retroceso llamado "Atrás", y cuando presiono "Atrás" aparece una nueva barra de navegación con un botón de retroceso llamado "Vinene", que es el título del TableView al que conduce. Esa es la que quiero mantener. Creo que el problema está en algún lugar de DetailViewController.m o en didselectrowatindexpath en MasterViewController.m. Espero que alguien pueda ver el problema!Barra de navegación doble no deseada

DetailViewController.m:

@interface WinesDetailViewController() 

@end 

@implementation WinesDetailViewController 

@synthesize wineDictionary; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
if (self) { 
    // Custom initialization 
} 
return self; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
[super viewDidAppear:animated]; 

} 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view. 

self.navigationController.navigationBar.translucent = YES; 
         self.wantsFullScreenLayout = YES; 

UITapGestureRecognizer *tap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideShowNavigation)] autorelease]; 
                             tap.numberOfTapsRequired = 1; 
                           [self.view addGestureRecognizer:tap]; 
} 

- (void) hideShowNavigation 
{ 
[self.navigationController setNavigationBarHidden:!self.navigationController.navigationBarHidden]; 
} 

- (void)viewDidUnload 
{ 
[super viewDidUnload]; 
// Release any retained subviews of the main view. 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

- (BOOL)hidesBottomBarWhenPushed{ 
return TRUE; 
} 


@end 

MasterViewController.m:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    { 
    [tableView deselectRowAtIndexPath:indexPath animated:YES];  

    NSDictionary *dictionary = [wine libraryItemAtIndex:indexPath.row]; 

    if (winesDetailViewController == nil) { 
     // Init the wine detail view 
     winesDetailViewController = [[WinesDetailViewController alloc] init]; 
    } 
    // Here you pass the dictionary 
    winesDetailViewController.wineDictionary = dictionary; 

    [self.navigationController pushViewController:winesDetailViewController animated:YES]; 
    } 
} 
+0

imagen de la publicación por favor – Legolas

Respuesta

3

Por lo general, una barra de navegación que se repite como usted describe es causado por algo como empujar el mismo controlador de vista dos veces. ¿Puedes verificar para asegurarte de que solo estás presionando un único controlador de vista en tu pila de navegación (a través de puntos de interrupción o registro?). ¿Es posible que winesDetailViewController ya esté en la pila de navegación? También puede intentar registrar el valor de self.navigationController.viewControllers para obtener una pista.

También sugeriría mover

self.navigationController.navigationBar.translucent = YES; 

a viewWillAppear y

self.wantsFullScreenLayout = YES; 

a su inicializador (aunque no creo que esto va a resolver su problema).

+0

Supongo que ese es el problema, suena lógico. Intento pasar datos som de una vista de tabla a una vista de detalle, pero es complicado porque soy nuevo en esto. He hecho una conexión del guión gráfico desde la celda del prototipo a la vista de detalle en el guión gráfico, y en el código didselectrowatindexpath que publiqué en mi pregunta. Funciona bien hasta el momento, excepto la barra doble. – ingenspor

+0

Si está usando un guión gráfico de esa manera, probablemente quiera usar algo como lo sugiere esta pregunta; no presione su propio controlador de vista detallada. http://stackoverflow.com/questions/8130600/use-didselectrowatindexpath-or-prepareforsegue-method-for-uitableview –

Cuestiones relacionadas