2010-11-04 39 views
0

Mon problème est que le bouton de retour ne sera pas restaurer sa visibilité si ma demande Web ne se termine pas avant ou peu après que ViewWillAppear a tiré.Masquage du bouton de retour sur l'application iPhone de navigation échoue

J'ai une application basée sur la navigation iPhone 4.0 utilisé une simple configuration de vue racine et détaillée. Je travaille avec des données renvoyées par un service Web. Lorsque j'appuie sur ma vue de détail dans sa fonction ViewDidLoad, j'appelle ma méthode de service Web dans un fil distinct et le cycle de vie de l'Iphone fait son effet sur le thread principal. Je dois désactiver/cacher le bouton de retour jusqu'à ce que la demande Web soit finie (ou échouée) ainsi j'appelle self.navigationItem.hidesBackButton = YES; dans ViewDidLoad et self.navigationItem.hidesBackButton = NO; dans la fonction de délégué qui se déclenche une fois que ma demande de Web a fini ou a échoué.

je l'ai déjà essayé ce qui suit:

[self.navigationItem performSelectorOnMainThread:@selector(setHidesBackButton:) withObject:NO waitUntilDone:NO]; 
[self.navigationItem setHidesBackButton:NO]; 
[self.view setNeedsDisplay]; 
[self.navigationController.view setNeedsDisplay]; 

UINavigationItem *nav = self.navigationItem; 
nav.hidesBackButton = NO; 

Racine View Controller Poussez le code:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
ArticleViewController *articleViewController = [[ArticleViewController alloc] initWithNibName:@"ArticleViewController" bundle:nil]; 
NewsArticle *newsArticle = [newsItems objectAtIndex:indexPath.row]; 
articleViewController.articleID = newsArticle.newsID; 
[self.navigationController pushViewController:articleViewController animated:YES]; 

[newsArticle release]; 
[articleViewController release]; 
} 

Détails Afficher le code Controller:

- (void)viewDidLoad { 
[super viewDidLoad]; 

self.navigationItem.hidesBackButton = YES; 
id scrollView = [[[self webContent] subviews] objectAtIndex:0]; 
if([scrollView respondsToSelector:@selector(setBackgroundColor:)]) 
{ 
    [scrollView performSelector:@selector(setBackgroundColor:) 
     withObject:[UIColor blackColor]]; 
} 

[self getNewsArticle]; 
} 

//Fires when the web request has finished 
- (void) finish:(NewsArticle *)newsArticleFromSvc { 
self.navigationItem.hidesBackButton = NO; 
self.newsArticle = newsArticleFromSvc; 
[self bindNewsArtice]; 
} 

Toute aide est très appréciée je peux à peine @ # $ &^croire que le fait de cacher un bouton dans une interface utilisateur pourrait me causer c'est beaucoup de temps perdu.

Répondre

1

je n'étais pas en mesure de résoudre ce problème. Au lieu de cela, j'ai peaufiné mon App Logic pour faire cacher le bouton de retour pas nécessaire.

+0

C'est probablement la meilleure approche. Le fait de masquer le bouton de retour n'est généralement pas une bonne décision d'interface utilisateur, car il prend le contrôle de l'utilisateur. :) –

1

essayez d'utiliser cette méthode de UINavigationItem:

- (void)setHidesBackButton:(BOOL)hidesBackButton animated:(BOOL)animated