2010-12-13 6 views

Répondre

-2

Vous pouvez créer une variable globale pour votre premier contrôleur de vue de stocker le texte valeur Feild et il suffit de créer une référence de première classe viewcontroller dans votre deuxième contrôleur de vue ... Ensuite, vous pouvez accéder à la variable

5

En créant un ivar pour renvoyer à un type spécifique tel qu'une étiquette ou un autre contrôleur de vue, vous associez des choses qui ne sont pas nécessaires pour être couplées. Ce que vous pouvez faire à la place est de faire de votre premier contrôleur de vue à onglets un délégué de votre deuxième contrôleur de vue à onglets. Donc, faites quelque chose comme ça dans votre délégué de l'application.

OptionsViewController *optionsViewController = // ... get this from the tab view 
FirsTabViewController *firstTabViewController = // ... same here 

[optionsViewController setDelegate:firsTabViewController]; 

Ce qui signifie que vous avez besoin d'un Ivar dans votre OptionsViewController:

@property (assign) id delegate; 

Puis, quand tout événement que vous souhaitez déclencher le changement se produit dans les options voir contrôleur, voir si le délégué peut répondre à un sélecteur que vous avez nommé. Par exemple:

- (void)someEventHappenedLikeTyping:(id)sender; 
{ 
if ([delegate respondsToSelector:@selector(setOptionsString:)] 
    [delegate performSelector:@selector(setOptionsString:) withObject:[label text]]; 
} 

Notez que vous n'avez jamais spécifié de type d'objet spécifique. Vous vérifiez juste pour voir si le délégué (qui a été déclaré comme id) peut répondre à ce sélecteur. Si c'est possible, il fait ce qu'on lui dit et reste silencieux autrement.

Pour que cela fonctionne, vous avez besoin d'un Ivar pour le optionsString dans votre FirstTabViewController et il serait donc déclaré dans l'en-tête comme:

@property (copy) NSString *optionsString; 

et @synthesize puis dans le .m. Cela provoque -setOptionsString pour devenir un sélecteur valide qui sera appelé dans la méthode -someEventHappenedLikeTyping. De toute façon, maintenant, si jamais vous avez besoin de changer quel contrôleur de référence référence, vous n'avez pas besoin d'aller dans l'en-tête et de changer le type d'ivar référencé. Vous devez simplement implémenter le sélecteur (c'est un protocole informel, d'ailleurs) dans le contrôleur de vue qui est un délégué de votre contrôleur de vue d'options.

Juste un peu de matière à réflexion là-bas. J'espère que cela pourra aider. Il y a d'autres découplages qui pourraient être faits dans le code que j'ai ajouté, mais encore une fois, cela peut être exagéré pour une tâche aussi simple. Faites-moi savoir si vous avez besoin de clarification ou si vous voulez comprendre ce que je veux dire par un découplage supplémentaire. Cordialement,

p.s. Parfois besoin de partager des données entre deux contrôleurs de vue de la barre d'onglets, signifie que vous avez un défaut de conception.Si vous êtes désireux de stocker les préférences de vos options voir, vous devez simplement appeler

[[NSUserDefaults standardUserDefaults] setObject:[label text] forKey:@"option1"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

Ensuite, vous pouvez tirer des NSUserDefaults en arrière dans l'onglet principal avec;

NSString *option1 = [[NSUserDefaults standardUserDefaults] objectForKey:@"option1"]; 

// Faire quelque chose avec option1

Référence ParHow to access data from one view to another view?

Questions connexes