我正在使用 Xamairn.Forms ,如何在导航栏中禁用后退按钮
ViewList
正在刷新。
实际上,我使用以下代码来禁用默认后退按钮,但是现在我正试图找到也禁用导航栏后退按钮
protected override bool OnBackButtonPressed()
{
if (ListView.IsRefreshing)
return true;
return false;
}
我知道如何在导航栏中禁用后退按钮?
答案 0 :(得分:3)
整体Android和iOS没有正常的API来阻止导航栏后退按钮被执行的一个很好的理由,用户希望能够返回,你不应该阻止他们这样做。
您应该改变您的设计,只需向用户提供您希望他们能够完全制作或隐藏导航栏的选项,并使用您自己的按钮创建自己的栏。
Adam's guide提供了一个很好的主题视图,我希望在面对这个问题时我会发现它。
他建议我做了同样的事情,但是如果你拒绝改变你的设计,也会提供非常黑客的方法来阻止导航(下面的代码与上面链接的文章大致相同):
在Android 上,您可以尝试查找后退按钮,并使用ContentPage
的ViewModel方法查看是否应该允许返回。您将覆盖OnOptionsItemSelected
中的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);
}
在iOS 上,您需要一个自定义渲染器来切换自定义渲染器的真实后退按钮:
[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);
}
}
}
}
}
在Windows Phone上 ...只需覆盖OnBackButtonPressed
...使用WP实际上很容易一次。
答案 1 :(得分:0)
您可以使用以下代码来禁用Xamarin Forms中的后退按钮:
ts_failure = datetime.datetime(2019, 5, 15, 19, 48, 2, 495)
nearest_idx = np.searchsorted(df['Timestamp'], ts_failure) - 1
nearest_time = df.iloc[nearest_idx]['Timestamp']
t_500ms = nearest_time - pd.Timedelta(milliseconds = 500)
df.index = df['Timestamp']
df2 = df.loc[t_500ms: nearest_time]
希望它能对您有所帮助。
答案 2 :(得分:0)
您可以使用此简单代码防止用户向后导航 注意您应该只有一页 (根页面),用户可以导航回该页面。 例如,我们有一个名为“登录”,“主页”和“汽车”页面的页面 根页面是Login
=>主页内:
Home home= this;
Navigation.PushAsync(new Cars());
Navigation.RemovePage(home);
=>您应该对除根页面之外的其余页面执行此操作!