2012-06-26 2 views
5

Ho fatto apparire/scompare la barra di navigazione (barra in alto) quando tocco lo schermo, e anche in cima all'immagine di sfondo. Ha funzionato, ma con un problema: ho improvvisamente ottenuto due barre di navigazione! Innanzitutto, uno con un pulsante indietro chiamato "Indietro", e quando premo "Indietro" si apre una nuova barra di navigazione con un pulsante indietro chiamato "Vinene", che è il titolo del TableView a cui riconduce. Questo è quello che voglio mantenere. Penso che il problema sia da qualche parte nel DetailViewController.m o nel didselectrowatindexpath nel MasterViewController.m. Spero che qualcuno possa vedere il problema!Barra di navigazione doppia indesiderata

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

post foto per favore – Legolas

risposta

3

Di solito, una barra di navigazione che ricorre come lei descrive è causato da qualcosa come spingere lo stesso controller della vista due volte. Puoi verificare che tu stia spingendo un solo controller di visualizzazione sul tuo stack di navigazione (tramite punti di interruzione o registrazione?). È possibile che winesDetailViewController sia già nello stack di navigazione? Puoi anche provare a registrare il valore di self.navigationController.viewControllers per un suggerimento.

Vorrei anche suggerire movimento

self.navigationController.navigationBar.translucent = YES; 

a viewWillAppear e

self.wantsFullScreenLayout = YES; 

al initializer (anche se non credo che questo risolverà il problema).

+0

Immagino che questo sia il problema, suona logico. Cerco di passare alcuni dati da una vista tabella a una vista dettagli, ma è difficile perché sono nuovo a questo. Ho creato una connessione storyboard dalla cella prototipo alla visualizzazione dettagli nello storyboard e nel codice didselectrowatindexpath che ho inserito nella mia domanda. Funziona fino ad ora tranne la doppia barra. – ingenspor

+0

Se stai usando uno storyboard in questo modo, probabilmente vuoi usare qualcosa come suggerisce questa domanda; non spingere il proprio controller di visualizzazione dei dettagli. http://stackoverflow.com/questions/8130600/use-didselectrowatindexpath-or-prepareforsegue-method-for-uitableview –