2010-07-26 3 views
2

Je suis en train de développer une application pour iPhone qui permet, entre autres, à l'utilisateur de s'inscrire, de se connecter et de se déconnecter d'un serveur Web distant.Commutation de plusieurs vues à l'aide d'un délégué

Pour cette fonctionnalité de l'application, j'ai 3 contrôleurs de vue définis.

  • SignupViewController
  • LoginViewController
  • LogoutViewController

et chacun a un fichier XIB respectif.

Je souhaite pouvoir basculer entre les vues en fonction du bouton sélectionné. Exemple:

Le SignupView aura un bouton d'inscription et un bouton de connexion, si le bouton d'inscription est pressé Je veux changer de vue à LogoutView et si le bouton de connexion est pressé alors je veux changer de vue au LoginView.

De même, le LoginView aura un bouton de connexion et lorsque vous appuyez basculera vues sur le LogoutView

Et finallty le LogoutView aura un bouton de fermeture de session qui est l'action basculera vues sur le LoginView

Je suis penser à un certain nombre de stratégies différentes à prendre en développant cela, mais je ne suis pas sûr lequel est le meilleur.

Une idée, et probablement la plus simple à mettre en œuvre, est d'avoir un seul contrôleur de vue avec trois vues différentes définies dans le fichier xib et de laisser le contrôleur gérer la commutation. J'ai quelques problèmes avec cette approche, le fichier xib sera assez volumineux et pourrait être lent à charger alors que la logique de mon contrôleur deviendra probablement très complexe.

La deuxième idée et mon approche actuelle est d'avoir un contrôleur de vue parent qui est responsable de l'activation et la désactivation de l'une des trois sous-vues. Le problème que j'ai avec ceci est que les actions de bouton peuvent seulement être assignées aux méthodes dans le contrôleur de vue secondaire actuel. Dans mon cas, la méthode que j'ai besoin d'appeler pour gérer le commutateur est dans le contrôleur parent et cette méthode n'est pas disponible pour mes sous-vues. Un délégué semblerait la réponse parfaite ici que je pourrais demander au contrôleur parent d'exécuter la méthode de commutateur, mais je ne suis toujours pas sûr de la façon dont je définirais un délégué pour effectuer cette opération dans mon code.

Quelqu'un peut-il vous aider? Y a-t-il une troisième stratégie qui fonctionnerait mieux que la stratégie des délégués?

Répondre

1

Si vous utilisez un UINavigationController en tant que root, vous pouvez ouvrir et pousser les contrôleurs de votre choix. Donc, vous pourriez commencer quelque chose comme ceci:

[rootController.navigationController pushViewController: someVC animated: YES]; 

Puis, plus tard, lorsque vous voulez passer de someVC à someOtherVC, vous feriez ceci:

UINavigationController *navCon = self.navigationController; 
[navCon popViewControllerAnimated: NO]; // get rid of me 
[navCon pushViewController: someOtherController animated: YES]; // add new controller. 

REMARQUE: Tout le code tapé dans le navigateur et non testé, mais je pense que vous devriez avoir l'idée de cela.Vous pouvez utiliser des délégués ou des notifications ou d'autres choses, mais la chose push/pop sur le contrôleur de navigation est très pratique pour ce type de réarrangement de vue-pile. REMARQUE: Si vous n'aimez pas l'apparence du contrôleur de navigation, vous pouvez masquer la barre de navigation! :)

+0

Oui, il semble qu'un contrôleur de navigation soit la solution. Merci pour la suggestion. – KJF

Questions connexes