J'utilise Xamairn.Forms , Comment puis-je désactiver le bouton Retour dans la barre de navigation lors de l' ViewList
actualisation.
En fait, j'utilise le code suivant pour désactiver le bouton de retour par défaut, mais pour le moment, j'essaie de trouver aussi pour désactiver le bouton de retour de la barre de navigation
protected override bool OnBackButtonPressed()
{
if (ListView.IsRefreshing)
return true;
return false;
}
Une idée comment je peux désactiver le bouton Retour dans la barre de navigation?
Dans l'ensemble, Android et iOS ne disposent pas d'API normales pour empêcher l'exécution d'un bouton de retour de la barre de navigation pour une très bonne raison, l'utilisateur s'attend à pouvoir revenir en arrière et vous ne devez pas les empêcher de le faire.
Vous devriez plutôt modifier votre conception en ne donnant à l'utilisateur que les options que vous souhaitez qu'il puisse créer ou masquer entièrement la barre de navigation et créer votre propre barre avec vos propres boutons.
Le guide d'Adam offre une vue d'ensemble du sujet que j'aurais aimé trouver face à ce problème.
Il suggère les mêmes choses que je viens de faire, mais fournit également des moyens TRÈS piratés pour éviter de revenir en arrière si vous refusez de modifier votre conception (le code ci-dessous est essentiellement inchangé par rapport à l'article lié ci-dessus):
Sur Android, vous pouvez essayer de trouver le bouton de retour et utiliser la ContentPage
méthode ViewModel pour savoir si le retour en arrière doit être autorisé ou non. Vous écraseriez OnOptionsItemSelected
dans MainActivity
:
public override bool OnOptionsItemSelected(IMenuItem item) {
var app = Application.Current;
if (item.ItemId == 16908332) { // This makes me feel dirty.
var navPage = ((app.MainPage.Navigation.ModalStack[0] as MasterDetailPage).Detail as NavigationPage); // Notice this code assumes it is looking for a MasterDetailPage being shown as a modal
if (app != null && navPage.Navigation.NavigationStack.Count > 0) {
int index = navPage.Navigation.NavigationStack.Count - 1;
var currentPage = navPage.Navigation.NavigationStack[index];
var vm = currentPage.BindingContext as ViewModel; //You would want to cast this to a base ViewModel or a specific one so that OnBackButtonPressed() can be called
if (vm != null) {
var answer = vm.OnBackButtonPressed();
if (answer) {
return true;
}
}
}
}
return base.OnOptionsItemSelected(item);
}
Sur iOS, vous avez besoin d'un moteur de rendu personnalisé pour changer le vrai bouton de retour pour le vôtre:
[assembly: ExportRenderer(typeof(Page), typeof(CustomPageRenderer))]
namespace Mobile.iOS.CustomRenderer {
public class CustomPageRenderer : PageRenderer {
public override void ViewWillAppear(bool animated) {
base.ViewWillAppear(animated);
var page = Element as CorePage;
if (page != null) {
if ((page).OverrideBackButton) {
var root = this.NavigationController.TopViewController;
// NOTE: this doesn't look exactly right, you need to create an image to replicate the back arrow properly
root.NavigationItem.SetLeftBarButtonItem(new UIBarButtonItem("< Back", UIBarButtonItemStyle.Plain, (sender, args) => {
var navPage = page.Parent as NavigationPage;
var vm = page.BindingContext as ViewModel;
if (vm != null) {
var answer = vm.OnBackButtonPressed();
if (!answer)
navPage.PopAsync();
} else {
navPage.PopAsync();
}
}), true);
}
}
}
}
}
Sur Windows Phone ... il suffit de remplacer OnBackButtonPressed
... travailler avec WP est en fait facile pour une fois.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots