MvvmCross清除后台堆栈并更改TabBarController选择选项卡

时间:2015-12-19 17:05:27

标签: ios xamarin mvvmcross

我有MvxTabBarViewController个实例mainViewmainView有四个标签,每个标签都有一个UINavigationController。现在我处于这样的位置:

Tab1 -> UINavigationController -> HomeView -> FirstView -> SecondView -> ...

我在SecondView中,我想在Tab1中清除后台堆栈,然后更改TabBarViewController的selectedViewController

我的代码:

if (clearHint.Body.Data["NavigationMode"] == "IncomeView")
{
    mainView.SelectedViewController = mainView.ViewControllers[2];
    return;
}
else if (clearHint.Body.Data["NavigationMode"] == "ClearStack")
{
    var navController = mainView.ViewControllers[0] as UINavigationController;
    foreach (var item in navController.ViewControllers)
    {
         if (item is HomeView)
         {
             navController.PopToViewController(item, false);
             return;
         }
     }
}

var clearStack = new ClearHistoryPresentationHint(new MvxBundle(new Dictionary<string,string>{{ "NavigationMode", "ClearStack" }}));
ChangePresentation(clearStack);

await Task.Delay(50);

var bundle = new MvxBundle(new Dictionary<string, string> { { "NavigationMode", "IncomeView" } });
var toInCome = new ClearHistoryPresentationHint(bundle);
ChangePresentation(toInCome);

如果我删除此行 await Task.Delay(50); 。应用程序将崩溃或无法工作取决于 if / else if 订单。问题是我无法将清除堆栈代码更改标签栏selectedViewController代码放在一起。

那么,实现这个目标的正确方法是什么?

更新1

没有问题在没有 await Task.Delay(50)的情况下使用下面的代码。

如果我将订单 1,2 更改为 2,1 ,则应用程序崩溃。

if (clearHint.Body.Data["NavigationMode"] == "IncomeView")
{
    // 1. Change Tab
    mainView.SelectedViewController = mainView.ViewControllers[2];

    // 2. Clear BackStack
    var navController = mainView.ViewControllers[0] as UINavigationController;

    foreach (var item in navController.ViewControllers)
    {
        if (item is HomeView)
        {
            navController.PopToViewController(item, false);
            break;
        }
    }
    return;
 }

0 个答案:

没有答案