2010-09-16 9 views
0

Je suis en train de développer une application mais je n'ai pas encore réussi à obtenir le flux de navigation optimal.iPhone Voir Stratégie

Pour vous donner une idée de la structure de mon application, j'ai une vue principale qui permet à l'utilisateur de commencer une nouvelle partie ou d'afficher des scores élevés. À la fin d'un jeu, je voudrais donner à l'utilisateur le choix de visionner des scores élevés ou de retourner au menu principal - j'ai un jeu en vue pour cela.

La hiérarchie ressemble à ceci:

Main View 
| 
+--Game View 
| | 
| +--Game Over View 
|  | 
|  +--High Scores View 
| 
+--High Scores View 

J'utilise la méthode presentModalViewController pour passer de la vue du jeu au jeu sur la vue. C'est bien, mais quand je veux revenir à la vue principale, j'ai deux couches de vues à parcourir (je veux fermer le jeu sur la vue ET la vue du jeu pour revenir directement à la vue principale). Pour fermer les vues j'utilise dismissModalViewControllerAnimated mais ce n'est pas idéal pour parcourir plus d'une vue. Existe-t-il un moyen de remplacer la vue actuelle du modèle plutôt que d'en ouvrir une nouvelle?

J'espère que cela a du sens. S'il vous plaît laissez-moi savoir si vous avez besoin de plus de détails.

Merci d'avance pour toute aide.

Alan

+0

il y a une erreur dans le titre ... –

+0

Merci Ahmed. Fixé. –

Répondre

1

En plus de la bonne suggestion d'Alexsander, vous pouvez éviter complètement l'utilisation de presentModelViewController:animated:. Au lieu de cela, il suffit de définir la propriété rootViewController du UIWindow actif.

Après avoir défini aViewController comme rootViewController, appelez [aViewController.view becomeFirstResponder]; pour lui permettre de répondre à la saisie tactile.


Si presentModelViewController:animated: est comme appeler une méthode, la mise en rootViewController est comme un goto. Je pense qu'un "goto" pourrait être plus approprié ici en raison de la nature cyclique de l'ordre dans lequel les vues peuvent être présentées:

Vue principale -> Vue du jeu -> Jeu vue -> Vue principale -> Vue du jeu - > Game Over View -> etc.

+0

Merci beaucoup Jon, c'est très proche. Je peux maintenant revenir à la vue principale directement depuis le jeu sur la vue. Cependant, aucun de mes boutons ne fonctionne plus sur la vue principale (quand ils travaillent initialement). Y a-t-il autre chose que je dois faire pour rendre la vue correctement active? –

+0

Je viens d'éditer ma réponse en réponse à votre commentaire; voir le 2ème paragraphe. – AlcubierreDrive

+0

Merci Jon. Ça marche maintenant. Très appréciée. –

1

Si vous appelez -dismissModalViewController:animated: sur le contrôleur de vue racine, il rejettera les deux couches.

+0

Merci Alexsander. Cela fonctionne mais vous pouvez voir brièvement la vue du milieu avant de passer à la vue racine. Y a-t-il un moyen d'éviter cela? –

+0

Je ne suis pas sûr. Désolé ... –

0

Ce n'est pas élégant, mais une façon de ne jamais voir les vues du milieu est d'avoir une vue de transition (une sorte d'affichage par défaut ou un écran de démarrage) sous tout. Ensuite, toutes les vues que vous voulez permuter sont renvoyées à la vue de transition et le contrôleur de vue de transition présente la vue modale suivante à afficher, basée sur une sorte de logique d'état suivant. Vous n'aurez jamais plus de 1 vue en profondeur, donc il n'y aura pas de vues intermédiaires à voir.