2017-10-20 42 views
0

Nous commençons sur une application Xamarin.Forms, et il va y avoir quelques pages et la navigation entre les pages sera entièrement gérée par l'application - en particulier, il n'y a pas de bouton de retour, ce qui ne devrait pas poser de problème puisque nous ne prévoyons de sortir que pour iOS.Xamarin Page Navigation (encore)

La première page que l'utilisateur rencontre est la page de connexion. Une fois connecté, il accède à la page d'accueil. Pour effectuer cette transition, il suffit d'appeler

LoginPage.Navigation.PushModalAsync(HomePage) 

et c'est très bien.

Si sur la page d'accueil, ils cliquent sur le bouton Logout, je pourrais appeler PopModalAsync(), le problème est que le bouton Logout existe sur toutes les pages, donc l'utilisateur aurait pu suivre un chemin comme ceci:

Connexion -> Accueil -> Créer -> Format -> Imprimer -> Se déconnecter

et je dois passer immédiatement à l'écran de connexion.

Ainsi, sur la page d'accueil, si l'utilisateur appuie sur le bouton Déconnexion, j'ai essayé d'appeler

ApplicationHomePage.Navigation.PushModalAsync(LoginPage); 

mais nous avons eu une exception:

System.InvalidOperationException: Page must not already have a parent. 

Alors juste pour le plaisir, je pensais que je vais essayer la solution facile:

LoginPage.Parent = null; 
ApplicationHomePage.Navigation.PushModalAsync(LoginPage); 

Je ne vais jamais avoir un bouton de retour, et l'iPad n'en a pas, alors la co ntents des piles de navigation ne sont pas vraiment importants (non?)

Cette méthode de navigation est-elle "légale"? Cela va-t-il me causer un problème que je ne vois pas en ce moment?

+1

L'affichage de l'ensemble de votre application comme modale semble être une mauvaise idée. Au lieu de cela, je lancerais votre HomePage (ou un quelconque possesseur) en tant que root et afficherais Login comme modal. Après leur connexion, rejeter le modal. Quand ils se déconnectent, Pop to root, puis affichez à nouveau le modal. Ou il y a beaucoup d'autres approches que vous pourriez utiliser. – Jason

Répondre