阻止用户返回上一个活动

时间:2016-03-10 13:32:38

标签: c# android ios xaml xamarin

我正在开发一个Xamarin.Forms项目,在我的PCL中我创建了名为“Login.xaml”的启动页面。在此页面上,用户必须填写其凭据并将其发送到WebAPI。当API返回“1”/ true时,它会打开一个名为“Home.xaml”的新页面。

如何在按手机上的后退按钮时阻止用户返回登录页面?即:用户登录第一页,webapi验证它并返回“1”以便新页面(“Home”)打开,但是当用户按下Back按钮时它返回登录屏幕。在应用关闭之前,这是不可能的。

2 个答案:

答案 0 :(得分:2)

当您推送Home.xaml

时,可以从导航堆栈中删除登录页面
await Navigation.PushAsync(new Home());  // or whatever your page is called
Navigation.RemovePage(this);

这样,在您的用户访问主页后,没有任何内容可以回复。

为此,您的登录页面必须是NavigationPage。为此,您必须使用NavigationPage ctor包装它:

// this goes into your App.cs where you enter your app:
public App()
{
    MainPage = new NavigationPage(new Login()); // or whatever your login page is called
}

我建议您查看文档:{​​{3}}

答案 1 :(得分:0)

至于我,打电话RemovePage()给了我各种各样的问题。

我要做的就是改变思路。如果您执行的是Pop而不是Push,那么您实际上是在删除页面。那么为了能够做Pop而不是Push,你需要做什么?首先在当前页面之前插入下一页,然后弹出:

var newRootPage = new NewRootPage();
this.Navigation.InsertPageBefore(newRootPage, this);
await this.Navigation.PopAsync();

注意:为了实现这个目的,你还需要将你的初始根页包装在像@germi这样的NavigationPage中,在他的答案的最后部分说:

// this goes into your App.cs where you enter your app:
public App()
{
    // or whatever your login page is called
    MainPage = new NavigationPage(new Login()); 
}

PS:我的F#开源项目中的FWIW this was my fix