2009-11-16 4 views
0

J'utilise un UITabBarController pour garder une trace des différentes vues pour une application. Dans une vue, le «contrôleur de quiz», j'ai l'utilisateur choisissent des nombres des commandes segmentées et puis je stocke leurs réponses dans un tableau d'entier. En bas se trouve un bouton 'soumettre' qui, lorsqu'il est touché, devrait appeler une fonction dans une autre vue pour afficher les résultats en utilisant le "contrôleur de résultats". Ma question est, comment puis-je gérer les méthodes de classe pour permettre aux résultats d'être analysés et définir UILabels dans le "contrôleur de résultats" lorsqu'il est appelé par le "contrôleur de quiz"?J'appelle des fonctions dans d'autres classes quand UIButton est frappé

Mon code pour frapper le bouton Envoyer ressemble à ceci:

[ResultViewController calculateAndDisplayScores]; 

// swtich to results view 
mainDelegate.tabBarController.selectedIndex = 2; 

où « ResultViewController » est le nom de mon « contrôleur de résultats ». Lorsque je fais cela, ResultViewController me donne une erreur qui, je pense, dit que je ne peux pas définir une propriété de texte UILabel dans une méthode de classe.

Répondre

0

Vous ne voulez pas vraiment une méthode de classe. Vous voulez un moyen d'informer l'instance particulière de ResultViewController qui réside dans votre contrôleur de barre d'onglets pour se mettre à jour. Le compilateur se plaint à vous parce que vous appelez votre méthode sur la classe, au lieu d'une instance particulière.

Le plus simple, la plus laide façon de le faire, en fonction du code que vous avez posté, semble être:

[(ResultViewController*)[mainDelegate.tabBarController.viewControllers objectAtIndex:2] calculateAndDisplayScores]; 

// switch to results view 
mainDelegate.tabBarController.selectedIndex = 2; 

Mais la bonne façon de le faire serait probablement d'avoir une sorte de objet (s) modèle (s) où vit l'information. Votre interface de saisie de données communique avec le modèle pour obtenir les données actuelles et repousse les modifications de l'utilisateur. Le modèle peut alors informer les parties intéressées (comme le contrôleur de vue des résultats) que de nouvelles données sont disponibles et qu'elles doivent se mettre à jour en conséquence. Cette notification peut être effectuée à travers une relation de délégué, en utilisant le NSNotificationCenter, ou d'une autre manière dont vous rêvez.

(Pour les besoins du raisonnement, supposons que cela est vraiment une méthode de classe. Les classes en Objective-C n'ont pas vraiment l'état, donc comment une méthode de classe garder les résultats, ou mettre à jour votre interface utilisateur?)

Questions connexes