2009-04-16 8 views
1

En utilisant un UITabBar, j'ai 4 vues de frère (un par article d'étiquette). Lorsque l'application est chargée, le premier élément de l'onglet et la vue sont visibles. Cette première vue a un IBAction qui publie une NSNotification. Chacune des trois autres vues a des observateurs pour la notification, mais elles ne peuvent pas "entendre" la notification tant qu'elles ne sont pas visibles pour la première fois en touchant l'élément de la barre d'onglets.NSNotification entre les vues de frère

Est-il possible de publier un NSNotification à l'observateur NSNotification d'une vue de frère avant que le frère soit activé ou un moyen de charger les vues de frère d'une manière qu'ils peuvent les notifications d'observateur sans les activer?

Répondre

3

Les vues frères (ou, peut-être plus précisément, cousin vues :) ne reçoivent probablement pas les notifications car elles n'ont pas encore été instanciées. Normalement, un contrôleur de vue instancie sa vue (et ses sous-vues) lorsqu'il est affiché pour la première fois.

Ce que vous voulez probablement faire est d'avoir la vue contrôleurs gérer la notification plutôt que la sous-vue. Les contrôleurs de vue sont instanciés lorsque la barre d'onglets est configurée. Ils doivent donc être prêts à recevoir des notifications immédiatement.

Vous ne pouvez pas vraiment transférer la notification du contrôleur de vue à la sous-vue, car, pour la même raison, vous essayez de signaler une vue qui n'a pas encore été instanciée. Ce que vous devez faire est de garder une trace de l'état dans le contrôleur de vue, puis configurer correctement les sous-vues en viewDidLoad ou loadView (selon que vous utilisez une NIB ou non).

0

SOLVED -

Dans le délégué demande fichier d'implémentation:

- (void)applicationDidFinishLaunching:(UIApplication *)application { 

    [window addSubview:tabBarController.view]; 

    self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:2]; 
    self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:1]; 
    self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:0]; 
} 

Cette charge tous les (4) Voir les contrôleurs et ils ont tous écouter immédiatement NSNotifications.

+0

Si vous écoutez toujours des notifications dans les vues réelles (plutôt que d'afficher les contrôleurs), notez qu'elles seront libérées lorsque vous rencontrerez un avertissement de mémoire insuffisante. –

Questions connexes