Spectacle “Retour au Menu” Bouton dans iOS NavigationBar avec Xamarin.Les formes
Je suis en train de construire une application multi-plateforme à l'aide de C# et de Xamarin.Les formulaires. Il contient un slide-out menu mis en œuvre sous la forme d'un MasterDetailPage
. Alors que sur Android il y a un bouton avec l'icône de l'application dans le coin supérieur gauche, qui permet de passer à la diapositive de la page, il n'y a pas une telle barre de navigation point sur iOS.
Je me suis cassé vers le bas à la suite de minimum exemple dérivée de la Xamarin modèle de solution "Application Vide (Xamarin.Les formes Partagé)" et son remplacement à la mise en œuvre de la App
-catégorie:
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;
}
}
La solution ainsi que résultant des captures d'écran peut être trouvé à GitHub.
Mon idée était d'ajouter un "menu" ou le bouton "retour" dans l'iOS de code de la modification de la window.RootViewController.NavigationController.NavigationBar
dans le AppDelegate
classe. Mais window.RootViewController.NavigationController
est null
.
De remplacer le type de retour de GetMainPage()
par NavigationPage
au lieu de Page
n'aide pas.
Je pourrais ajouter des éléments de barre d'outils via MDPage.ToolbarItems.Add(...)
, mais ils apparaissent dans le top droit coin.
OriginalL'auteur Falko | 2014-07-11
Vous devez vous connecter pour publier un commentaire.
TL;DR
Essentiellement, votre
Detail
page doit être enveloppé dans unNavigationPage
pour le bouton de retour à apparaître dans iOS.Voici un exemple de la façon dont je structure mes applications.
App.cs
De la page d'accueil.cs
Maintenant que vous avez fait cela, votre Navigation sur le Tiroir de se comporter comme prévu, et il en va de votre ActionBar.
Lorsque vous souhaitez naviguer à travers l'application, vous utilisez le définis de manière statique
Navigation
PushAsync
surbutton.Clicked()
ouvre une nouvelle page de détail avec un bouton "Retour", qui cependant les liens de la page de détail, pas le menu (un.k.un. maître ou MainMenu) comme prévu. En outre, lawindow.RootViewController.NavigationController
est encorenull
, donc je ne peux pas modifier le bouton de cette façon.Ce que je suis en train de réaliser est le même problème que pour cette vidéo.
ce qui est dans la vidéo qui est le comportement par défaut si vous faites ce que j'ai fait ci-dessus. Votre
FirstPage
serait la page avec l'image. Remarque vous devez également définir l'icône sur le MainMenu (Maître) de la page.Désolé, mais je ne peux pas obtenir le comportement souhaité à l'aide de votre approche (voir App.cs sur GitHub). Le bouton "Retour" toujours me ramène à
"FirstPage"
et pas leMainMenu
.C'est la façon dont il est conçu pour le travail, êtes-vous essayer de révéler le menu de navigation?
OriginalL'auteur Chase Florell
Votre sur la bonne voie, votre NavigatePage doit aller sur le Détail, donc
serait
return new NavigationPage(MDPage = ...)
avecreturn MDPage
). Mais maintenant, je vois une icône sur Android, et le titre de laMaster
page sur iOS. Etwindow.RootViewController.NavigationController
est toujours null, donc je ne vois pas comment contrôler davantage l'apparence de la barre d'outils ou sur le bouton précédent, respectivement.OriginalL'auteur lee
J'ai enfin trouvé une solution. Le code doit essentiellement deux corrections mineures:
DetailPage
s dans unNavigationPage
, mais pas leMasterDetailPage
(voir #1, #2 et #3 ci-dessous).Icon
à laMasterPage
quand sur iOS (voir le point 4 ci-dessous). N'oubliez pas de un la réelle PNG(!) pour l'iOS ressources.Le minimum exemple de travail est comme suit:
Cette Application est de classe n'est pas la même que l'Application de la classe qui étend la classe d'Application ?
Quand j'ai trouvé cette solution (peu de temps après la publication de la question), c'est la façon de prolonger l'Application de la classe. En raison d'un Xamarin.Les formulaires de mise à jour, cela a un peu évolué. Voir ici pour les plus up-to-date de l'exemple du maître-détail pages.
Merci pour la mise à jour 🙂
L'icône a été la clé ingrédient manquant pour moi. Hop, le bouton de retour.
OriginalL'auteur Falko