全体的なAndroidとiOSにはナビゲーションバーの戻るボタンが非常に良い理由で実行されないようにするためのAPIはありません。ユーザーは元に戻ることができると予想しています。
代わりに、ナビゲーションバーを完全に作成または非表示にし、独自のボタンで独自のバーを作成できるようにするオプションだけをユーザーに与えてデザインを変更する必要があります。
Adam's guideは、この問題に直面したときに私が見つけたと思っていたであろう被験者の素晴らしい見解を提供します。 Androidでは
:
彼は私がちょうどやっただけでなく、あなたが(次のコードは、上記のリンク先の記事からほとんど変わらず持ち上げて)あなたのデザインを変更することを拒否した場合に戻ってナビゲート防ぐことが非常にハック方法を提供し、同じ事を示唆します戻るボタンを探して、ContentPage
のViewModelメソッドを使用して、戻ることを許可するかどうかを調べることができます。独自のカスタム1のための本当の戻るボタンスイッチアウトするためのカスタムレンダラを必要 iOSでは
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);
}
:あなたはMainActivity
内OnOptionsItemSelected
を上書きするのWindows Phoneで
[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);
}
}
}
}
}
を..ちょうどOnBackButtonPressed
を無効にする... WPとの作業は実際に一度簡単です。
バックボタンを無効にすると、アプリが反応しないと感じるようになります。代わりに、現在の方法が正しいです。メッセージを表示するToastメッセージを提供してください。または、円の進捗状況を表示して、ユーザーがアプリがビジーであることを知ることができます。 –
実際には、リストビューのインジケータは、リフレッシュ中に機能していますが、何らかの理由でユーザーが押し返す場合、リストビューがリフレッシュされているときにのみ検索を停止します。 –