【问题标题】:navigation issue : PopToRootAsync is not supported globally on iOS, please use a NavigationPage导航问题:iOS 上不支持 PopToRootAsync,请使用 NavigationPage
【发布时间】:2017-02-26 19:08:56
【问题描述】:

在 App 课上我有这个:

MainPage = new NavigationPage(new MainPage());

在 MainPage OnAppearing 中:

protected async override void OnAppearing ()
    {
        base.OnAppearing ();

        if (TempUserInfo.IsNewUser ())
            await this.Navigation.PushModalAsync ( new SignUpPage ());
    }

用户输入所有信息后在 SignUpPage 上,我使用这个:

await this.Navigation.PushModalAsync (new VerificationCodePage());

最后,在 VerificationPage 上检查验证码后,我使用了这个:

await this.Navigation.PopToRootAsync ();

现在,我收到了这个错误:

iOS 全球不支持 PopToRootAsync,请使用 NavigationPage。

我想要实现的和上面这个导航设置完全一样。

【问题讨论】:

  • 你认为如果我使用像 MVVMLight 这样的库在这种情况下会有所帮助吗?我记得它有不同的导航选项。只是想...
  • 你已经完成了 2 个 PushModalAsync,所以你需要做 2 个 PopModalAync,然后是 PopToRootAsync。
  • 如果我从 VerificationPage 执行 PopModalAsyn,这会将我送回 SignUpPage !相反,我想弹出到主页。
  • 这就是为什么你需要做 2 个 PopModals。如果您不喜欢这样,请重新设计您的导航。一种可能性是在您的 App 类中检测新用户,然后直接导航到 Signup。注册完成后,无需导航到 MainPage,只需完全换掉 App.MainPage。

标签: c# ios xamarin.forms


【解决方案1】:

而不是做

await this.Navigation.PopToRootAsync ();

您可以重置主页:

MainPage = new NavigationPage(new MainPage());

【讨论】:

    【解决方案2】:

    我放弃了 Jason 建议的导航,在 VerificationPage 中,我使用了这个:

    MainPage = new NavigationPage(new MainPage());
    

    感谢大家的帮助。

    【讨论】:

      【解决方案3】:

      此解决方案在 Android 上按预期工作。将这些放在 App.xaml.cs 中

       public static MyMasterDetail RootPage()
      {
          return (MyMasterDetail)Current.MainPage;
      }
      
      public static void NavigateToHomePage()
      {
          try
          {
      
      
              MainPage homePage = new MainPage();
              MyMasterDetail masterDetailRootPage = (MyMasterDetail)Application.Current.MainPage;
              masterDetailRootPage.Detail = new NavigationPage(homePage);
              masterDetailRootPage.IsPresented = false;
      
              Current.MainPage = masterDetailRootPage;
          }
          catch (Exception ex)
          {
              Debug.WriteLine("!!! NavigateToHomePage() Exception !!!");
              Debug.WriteLine("Exception Description: " + ex);
          }
      }
      

      然后你可以从任何地方打电话回家

         App.NavigateToHomePage();
      

      或显示主从左侧菜单

         App.RootPage().IsPresented = true;
      

      【讨论】:

        猜你喜欢
        • 2017-12-19
        • 2018-11-18
        • 2020-05-21
        • 2014-08-28
        • 2020-05-04
        • 2018-01-13
        • 2015-12-31
        • 1970-01-01
        • 2019-08-14
        相关资源
        最近更新 更多