2017-07-28 6 views
2

Ich habe mehrere Situationen, in denen ich mehrere Seiten modal als eine Aktion schieben möchte. Eine Situation ist am Anfang meiner Anwendung, wo ich meine Main-Page initialisieren und eine Splash-Page darüber drücken möchte. Ich denke, das ist ein sauberer Weg, um die App zu initialisieren, weil meine Main-Page geladen ist und die Spash-Seite darüber geschoben wird. Wenn der Benutzer die Splash-Seite ablegt, kann ich einfach die Splash-Seite öffnen und fertig sein. Derzeit haben follwing i die in meiner Anwendungsklasse:Push mehrere Seiten in Xamarin Forms

public App() 
    { 
     InitializeComponent(); 

     MainPage mainPage = new MainPage(); 
     SplashPage splashPage = new SplashPage(); 
     MainPage = mainPage; 
     mainpage.Navigation.PushModalAsync(splashPage,false); 
    } 

Mein Problem ist, während auf Android alles funktioniert wie erwartet, auf iOS es kurz ist Zeitraum, in dem die Startseite gezeigt, die als von der Splash-Seite überschichtet ist . Das sieht nicht gut aus und ist für den Benutzer einfach.

Ich bin mir bewusst, dass ich das obige Beispiel auf andere Arten behandeln kann, wie die Splash-Seite als Hauptseite festlegen und mit einer anderen Seite austauschen, wenn der Benutzer die Splash-Seite ablehnt. Aber ich habe andere Situationen, in denen es nicht so einfach ist und wo es logisch ist, den Seitenstapel im Voraus zu entwerfen.

Also, meine Frage ist, wie schiebe ich mehrere Seiten auf den modalen Stapel, ohne jede Seite für einen kurzen Zeitraum auf iOS anzuzeigen.

Antwort

4

Meine Antwort wäre Navigation.InsertPageBefore() zu verwenden.

iOS schlägt jetzt vor, dass Sie Ihre Splash-Seite wie eine super einfache Version Ihrer Hauptseite aussehen. Offensichtlich mögen viele Leute das nicht, weil sie ihre stylische Splash-Seite der Welt zeigen wollen. Aber Sie könnten die gleiche Idee dafür verwenden. Wenn Ihre Splash-Seite ein roter Hintergrund mit einem Logo in der Mitte ist, können Sie MainPage auf einen leeren ContentPage mit einem roten Hintergrund setzen, dann PushModalAsync Ihre Splash-Seite oben, dann fügen Sie Ihre MainPage vor dem grundlegenden ContentPage hinzu. Sobald das erledigt ist, könntest du einfach deinen Splash knallen lassen und der Benutzer würde auf den Main starren.

-Code Zeit:

ContentPage basicSplash = new ContentPage { BackgroundColor = Color.Red }; 
NavigationPage nav = new NavigationPage(basicSplash); //Do Navigation Page here with basic in it 

MainPage = nav; //Set basic splash 

nav.Navigation.PushModalAsync(new SplashPage(), false); //Show SplashPage modal over basic 

nav.Navigation.InsertPageBefore(new MainPage(), basicSplash); //You are now adding MainPage to the NavigationStack, not the ModalStack 

nav.Navigation.RemovePage(basicSplash); //Remove basic splash, so now only MainPage is left sitting in NavigationStack 

//Now you can do nav.PopModalAsync() when ready and the user should be looking at the MainPage since there is nothing left in the ModalStack and only MainPage is sitting in the NavigationStack 

Das einzige Problem hier wäre, dass Sie den Benutzer verhindern müssten aus geht zurück auf basicSplash entweder durch die Seite aus dem Stapel zu entfernen, das Setzen von mainPage auf Ihre .... MainPage, oder durch Entfernen der Zurück-Taste und/oder Überschreiben ContentPage.OnBackButtonPressed

+0

Thx, insertPage sollte es tun. Ich muss das Verhalten des Android zurück button tho überprüfen – Kedu

+0

Ich versuchte InsertPageBefore() heute, aber leider funktioniert es nicht für mich. Ich arbeite mit modalen Seiten und es scheint keine InsertPageBefore() für modale Seiten zu geben. – Kedu

+0

@Kedu Tut mir leid. Hab nicht mal darüber nachgedacht. Dann wäre es eigentlich einfacher. Schau dir die Änderung an. – hvaughan3