2010-08-17 7 views
1

Mon application utilise un contrôleur de barre d'onglets avec deux éléments de barre d'onglets: Chaque élément est un contrôleur de navigation.Afficher la communication des contrôleurs dans plusieurs contrôleurs de navigation

J'essaie d'accéder à un contrôleur de vue dans un contrôleur de navigation à partir d'un autre contrôleur de vue dans l'autre contrôleur de navigation, est-ce possible ?? et comment??

J'apprécierais toute aide possible, merci.

Mohsen

Répondre

3

Vous pouvez envisager d'utiliser les notifications ou (encore plus facile) d'observation de valeur-clé.

J'ai donné quelques conseils ce matin à propos de la communication entre contrôleurs dans un contexte UINavigationController. Puis, cet après-midi, j'ai essayé le KVO pour la première fois, et j'ai dû revenir en arrière et donner des conseils différents. KVO est WAY plus simple que d'essayer de chasser les choses dans une hiérarchie de vue. Vous venez de déclarer ce qui est en train d'observer quoi, puis de définir cette chose pour attraper les notifications de modification. Part de gâteau!

EDIT:

Notifications sont probablement la voie à suivre ici, en fait - si vous aviez deux objet instancié dans un seul endroit, vous pouvez enregistrer un titre d'observateur sur les autres touches de, mais ce n'est pas nécessairement le cas si vous construisez votre barre d'onglets à partir de modèles.

Donc, les notifications. L'idée est, vous enregistrez un contrôleur de vue en tant qu'observateur de notification, puis les notifications d'un autre contrôleur de vue, et l'observateur est averti lorsque la notification est envoyée. C'est un peu comme si votre application envoyait un courriel à elle-même.

Enregistrement et réception du message ressemble à ceci:

ViewControllerOne.m:

-(void)viewDidLoad //a likely place, but not the only place you might do this 
{ 
    .... 
    // whatever else you're doing to initialize your VC, and then 

    [[NSNotificationCenter defaultCenter] 
     addObserver:self 
     selector:@selector(iWasNotified:) 
      name:@"myNotification" 
      object:nil]; 
} 

-(void)iWasNotified:(NSNotification *)notification 
{ 
    NSString *passedValue = (NSString *)notification.object; 
    NSLog(@"We got notified and received: %@", passedValue); 
} 

Et envoyer le message est aussi simple que cela:

ViewControllerTwo.m:

[[NSNotificationCenter defaultCenter] 
    postNotificationName:@"myNotification" 
       object:@"I'm passing you this NSString object!"]; 

Vous n'êtes évidemment pas limité à passer une chaîne n le champ object:. Une utilisation un peu plus probable serait de passer self, puis vous auriez accès à tous les champs publics du contrôleur de vue d'affichage de notification.

C'est l'utilisation de bare-bones d'entre eux. Il y a beaucoup plus de subtilités que vous pouvez entrer dans, et il est tout Disposées ici: http://developer.apple.com/iphone/library/documentation/cocoa/Conceptual/Notifications/Introduction/introNotifications.html

+0

Merci beaucoup pour votre réponse, mais ... Je suis désolé, je suis très nouveau développement iPhone SDK. Si vous pouvez élaborer plus, qu'est-ce que les notifications et comment l'utiliser. Est-il possible de fournir un exemple de code. Je l'apprécierais vraiment. Merci – mshaaban

+0

Merci beaucoup pour votre explication. Cela m'a aidé à mieux comprendre le concept de notification maintenant. Bien que dans mon cas d'application, je devais partager des données de variables d'instance et des méthodes d'instance entre les contrôleurs de vue qui résident dans différentes piles de contrôleurs de navigation, j'ai donc utilisé une classe singleton pour l'inter communication entre les deux contrôleurs de vue. – mshaaban

+0

Eh bien, dans ce cas, le KVO pourrait être la meilleure solution.Vous pouvez enregistrer un contrôleur de vue particulier en tant qu'observateur sur des champs spécifiques de votre singleton de données et avoir une méthode particulière appelée lorsque ce champ est modifié. Allez chercher les documents d'Apple à ce sujet, c'est assez simple. –

Questions connexes