我有MvxTabBarViewController
个实例mainView
,mainView
有四个标签,每个标签都有一个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;
}