2010-08-09 7 views
1

J'ai une application de barre d'onglets qui a un écran qui affiche des statistiques basées sur les données présentées dans les vues de table des écrans sur onglets. Je voudrais actualiser cette vue une fois que l'affichage des statistiques est sélectionné à nouveau. J'ai implémenté le protocole tabbarcontrollerdelegate pour prendre une action quand viewcontroller.tabbaritem.title estequaltostring: @ "foo". ce qui fonctionne bien pour mon instruction nslog mais quand j'essaie de déclencher le viewcontroller pour exécuter la méthode viewdidload, cela n'arrive jamais. Et le code pour actualiser l'affichage des statistiques est dans la méthode viewdidload.Effectuer une action lorsque les modifications de tabBarController

De mon AppDelegate

- (void)tabBarController:(UITabBarController*)tabBarController didEndCustomizingViewControllers: (NSArray*)viewControllers changed:(BOOL)changed 
{ 
} 

- (void)tabBarController:(UITabBarController*)tabBarController didSelectViewController:(UIViewController*)viewController { 

    if([viewController.tabBarItem.title isEqualToString:@"Summary"]) { 
     NSLog(@"didSelectViewController %@", viewController.tabBarItem.title); 
     [viewController viewDidLoad]; //FAIL 
    } 

} 

Répondre

1

Ne jamais appeler viewDidLoad par vous-même. C'est une méthode déléguée qui est envoyée au contrôleur de vue une fois la vue chargée, vous ne devez pas l'appeler manuellement.

Dans ce cas, les contrôleurs de vue qui ont des vues qui sont gérées par un contrôleur de barre d'onglets sont envoyés le viewWillAppear:, viewDidAppear:, viewWillDisappear: et viewDidDisappear.

Vous devriez devrait utiliser ces méthodes pour effectuer des actions lorsque vos vues sont affichées et cachées.

Exemple: mettre en œuvre viewDidAppear: et rafraîchir vos stats voir.

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; // don't forget to call super, this is important 

    // do your refreshing here 
} 
Questions connexes