【问题标题】:iOS "More" Tab remember last open page issue (xamarin)iOS“更多”选项卡记住上次打开的页面问题(xamarin)
【发布时间】:2020-10-24 20:25:45
【问题描述】:

我有一个问题,iOS 上的“更多”选项卡行为异常。 使用 TabBar 和 TabbedPages。

当我启动应用程序时,我看到 4 个选项卡 (1-4) 和“更多”选项卡(由 xamarin.forms 自动创建)。 我打开“更多”选项卡以查看不适合的其他选项卡列表。我将看到我的列表“TabPage5”和“TabPage6”。 (下图)

我选择例如 TabPage5。之后,我将访问主栏 (tabPage1-4) 上的一个选项卡。 当我尝试再次打开“更多”选项卡以查看 TabPage5 和 TabPage6 的列表时 -> 我已经在 TabPage5 的详细信息上(上次从更多选项卡打开)。

它似乎记得我上次访问了哪个页面,或者我没有正确地从“更多”选项卡中离开该页面。

标签栏:

  • 标签页1
  • 标签页2
  • 标签页3
  • 标签页4
  • 更多
    • 标签页5
    • 标签页6

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/navigation/tabbed-page

谁能给我一些建议。当我单击“更多”选项卡时,我总是希望查看默认不可见的选项卡列表。 谢谢

【问题讨论】:

  • 这是默认行为,我认为这是设计使然。如果在 TabPage1 中打开详情页,然后转到 TabPage2 并返回 TabPage1,您将看到详情页而不是 TabPage1 的第一页。
  • 是的,我知道。但是有没有办法“覆盖”这种行为?

标签: c# xamarin xamarin.ios uinavigationbar tabbedpage


【解决方案1】:

创建TabbedPage 的自定义渲染器并在“更多”选项卡中选择选项卡时调用PopToRootViewController

[assembly: ExportRenderer(typeof(TabbedPage), typeof(MainPageRenderer))]
namespace TabbedPageWithNavigationPage.iOS
{
    public class MainPageRenderer : TabbedRenderer
    {
        MainPage _page;

        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);

            if (e.NewElement != null)
                _page = e.NewElement as MainPage;
            else
                _page = e.OldElement as MainPage;

            try
            {
                if (ViewController is UITabBarController tabBarController)
                    tabBarController.ViewControllerSelected += OnTabbarControllerItemSelected;
            }
            catch (Exception exception)
            {
                Debug.WriteLine(exception);
            }
        }


        void OnTabbarControllerItemSelected(object sender, UITabBarSelectionEventArgs eventArgs)
        {
            Debug.WriteLine("Tab Tapped");

            var tabbarVC = ViewController as UITabBarController;

            var tabIndex = tabbarVC.SelectedIndex;

            if (tabIndex == null || tabIndex > 3)
            {
                tabbarVC.MoreNavigationController.PopToRootViewController(false);
            }  
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多