2 votes

Changement de vues multiples à l'aide d'un délégué

Je suis en train de développer une application iPhone qui, entre autres, permet à l'utilisateur de s'inscrire, de se connecter et de se déconnecter d'un serveur web distant.

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

  • SignupViewController
  • LoginViewController
  • LogoutViewController

et chacun a un fichier xib respectif.

Je veux pouvoir passer d'une vue à l'autre en fonction du bouton sur lequel on appuie. Par 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 pour le LogoutView et si le bouton de connexion est pressé, je veux changer de vue pour le LoginView.

De même, l'affichage de connexion aura un bouton de connexion et, lorsqu'il sera pressé, il passera à l'affichage de déconnexion.

Et enfin, la LogoutView aura un bouton de déconnexion dont l'action fera basculer les vues vers la LoginView.

J'ai réfléchi à un certain nombre de stratégies différentes à adopter lors de l'élaboration de ce projet, mais je ne suis pas sûr de la meilleure.

Une idée, et probablement la plus facile à mettre en œuvre, est d'avoir un contrôleur de vue unique avec trois vues différentes définies dans le fichier xib et de laisser le contrôleur gérer la commutation. Cette approche me pose quelques problèmes : le fichier xib sera assez volumineux et pourrait être lent à charger, tandis 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 de la désactivation de l'une des trois vues secondaires. Le problème que je rencontre est que les actions des boutons ne peuvent être assignées qu'aux méthodes du contrôleur de la vue secondaire en cours. Dans mon cas, la méthode que je dois appeler pour gérer la commutation se trouve dans le contrôleur parent et cette méthode n'est pas disponible pour mes vues secondaires.

Un délégué semblerait être la réponse parfaite ici, car je pourrais demander au contrôleur parent d'exécuter la méthode de commutation, mais je ne sais toujours pas comment définir un délégué pour effectuer cette opération dans mon code.

Quelqu'un peut-il m'aider ? Existe-t-il une troisième stratégie qui fonctionnerait mieux que la stratégie de délégation ?

1voto

Olie Points 10528

Si vous utilisez un UINavigationController comme racine, vous pouvez faire apparaître et repousser tous les contrôleurs que vous voulez. Ainsi, vous pourriez commencer quelque chose comme ceci :

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

Puis, plus tard, lorsque vous voudrez passer d'un certain VC à un autre VC, vous ferez ceci :

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

NOTE : Tout le code a été tapé dans le navigateur et n'a pas été testé, mais je pense que vous devriez en avoir l'idée.

Vous pourriez utiliser des délégués, des notifications ou d'autres éléments, mais le système de push/pop du contrôleur de navigation est très pratique pour ce type de réorganisation de la pile de vues. NOTE : Si vous n'aimez pas le look du contrôleur de navigation, vous pouvez cacher la barre de navigation ! :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X