Show "Zurück zum Menü" - Button in iOS NavigationBar mit Xamarin.Formen
Ich versuche zu bauen, ein cross-Plattform-app mit C# und Xamarin.Formen. Es enthält eine slide-out-Menü implementiert in form einer MasterDetailPage
. Während auf Android gibt es eine Schaltfläche mit der app-icon in der oberen linken Ecke, die schaltet die slide-out-Seite, es gibt keine solche navigation in der Menüleiste auf iOS.
Ich brach es nach unten, um die folgenden minimalen Beispiel, abgeleitet aus dem Xamarin-Lösung Vorlage "Blank App (Xamarin.Formen Shared)" und ersetzen die Umsetzung der App
-Klasse:
public class App
{
static MasterDetailPage MDPage;
public static Page GetMainPage()
{
return new NavigationPage(
MDPage = new MasterDetailPage {
Master = new ContentPage {
Title = "Master",
Content = new StackLayout {
Children = { Link("A"), Link("B"), Link("C") }
},
},
Detail = new ContentPage { Content = new Label { Text = "A" } },
});
}
static Button Link(string name)
{
var button = new Button { Text = name };
button.Clicked += delegate {
MDPage.Detail = new ContentPage { Content = new Label { Text = name } };
MDPage.IsPresented = false;
};
return button;
}
}
Die Lösung als auch der daraus resultierenden screenshots finden Sie unter GitHub.
Meine Idee war, solch ein "Menü" oder "zurück" - button in der iOS-spezifischen code ändern der window.RootViewController.NavigationController.NavigationBar
innerhalb der AppDelegate
Klasse. Aber window.RootViewController.NavigationController
ist null
.
Austausch der Rückgabetyp GetMainPage()
durch NavigationPage
statt Page
nicht helfen.
Ich könnte hinzufügen, Symbolleiste Elemente über MDPage.ToolbarItems.Add(...)
, aber Sie erscheinen in der oberen Recht Ecke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
TL;DR
Wesentlichen, Ihre
Detail
Seite muss gewickelt werden in einemNavigationPage
für die zurück-Taste, erscheint in iOS.Hier ist ein Beispiel, wie ich die Struktur meiner apps.
App.cs
MainPage.cs
Nun, dass Sie dies getan haben, Ihre Navigation Drawer wird als Verhalten erwartet, und so wird Eure ActionBar.
Wenn Sie möchten, um zu navigieren durch die app, die Sie verwenden, die statisch definierten
Navigation
PushAsync
aufbutton.Clicked()
öffnet sich eine neue detail-Seite mit einer Schaltfläche "Zurück", die jedoch - von links zurück zum vorherigen detail-Seite, nicht das Menü (ein.k.ein. master-oder MainMenu) als gedacht. Außerdemwindow.RootViewController.NavigationController
nochnull
, somit kann ich nicht ändern, der button auf diese Weise.FirstPage
wäre die Seite mit dem Bild auf Sie. Hinweis: Sie müssen auch das Symbol auf dem Hauptmenü (Master) Seite."FirstPage"
und nicht dieMainMenu
.MainMenu
- wie ist es bei Android.MainActivity
können Sie überschreibenOnBackPressed
EinstellungIsPresented=false
wenn es aktuelltrue
.Ihr auf dem richtigen Weg, Ihre NavigatePage gehen muss auf der Detail-so
wäre
return new NavigationPage(MDPage = ...)
mitreturn MDPage
als gut.) Aber jetzt sehe ich ein Symbol auf Android-und der Titel desMaster
Seite auf iOS. Undwindow.RootViewController.NavigationController
ist immer noch null, damit ich nicht sehen, wie weitere Steuern die Darstellung der Symbolleiste oder die zurück-Taste, beziehungsweise.Habe ich endlich eine Lösung gefunden. Der code im Grunde braucht zwei kleine Korrekturen:
DetailPage
s in einemNavigationPage
, aber nicht dieMasterDetailPage
(siehe #1, #2 und #3 unten).Icon
zu denMasterPage
wenn Sie auf iOS (siehe #4 unten). Vergessen Sie nicht, um ein den tatsächlichen PNG(!) die iOS Ressourcen.Dem minimalen Beispiel ist wie folgt: