Xamarin.ios 自定义MvxTouchViewPresenter不显示后续ViewModel
我已经编写了一个自定义的Xamarin.ios 自定义MvxTouchViewPresenter不显示后续ViewModel,xamarin.ios,mvvmcross,Xamarin.ios,Mvvmcross,我已经编写了一个自定义的MvxTouchViewPresenter,它允许我显示(RootView),或者显示MvxTabBarViewController(AuthView) 当我的应用程序启动时 如果我告诉它加载TabBarView(AuthView),它会按预期工作 如果我告诉它加载SlidingPanelView(RootView),它也会按预期工作 当我加载AuthView并尝试ShowViewModel()…时,就会出现问题。。。基本上,在这个场景中发生的情况是,尽管我看到Cus
MvxTouchViewPresenter
,它允许我显示(RootView
),或者显示MvxTabBarViewController
(AuthView
)
当我的应用程序启动时
- 如果我告诉它加载TabBarView(
),它会按预期工作李>AuthView
- 如果我告诉它加载SlidingPanelView(
),它也会按预期工作RootView
AuthView
并尝试ShowViewModel()
…时,就会出现问题。。。基本上,在这个场景中发生的情况是,尽管我看到CustomPresenter.Show()
方法已正确运行,但我仍然停留在AuthView
方法是这样的
public override void Show(MvxViewModelRequest request)
{
var viewController = (UIViewController)Mvx.Resolve<IMvxTouchViewCreator>().CreateView(request);
RootController = new UIViewController();
// This needs to be a Tab View
if (request.ViewModelType == typeof(AuthViewModel))
{
_navigationController = new EmptyNavController(viewController);
RootController.AddChildViewController(_navigationController);
RootController.View.AddSubview(_navigationController.View);
}
if (request.ViewModelType == typeof(RootViewModel))
{
_navigationController = new SlidingPanelsNavController(viewController);
RootController.AddChildViewController(_navigationController);
RootController.View.AddSubview(_navigationController.View);
AddSlidingPanel<NavigationFragment>(PanelType.LeftPanel, 280);
}
base.Show(request);
}
公共覆盖无效显示(MvxViewModelRequest请求)
{
var viewController=(UIViewController)Mvx.Resolve().CreateView(请求);
RootController=新的UIViewController();
//这需要是一个选项卡视图
if(request.ViewModelType==typeof(AuthViewModel))
{
_navigationController=新的EmptyNavController(viewController);
RootController.AddChildViewController(_navigationController);
RootController.View.AddSubview(_navigationController.View);
}
if(request.ViewModelType==typeof(RootViewModel))
{
_navigationController=新的滑动面板AVController(viewController);
RootController.AddChildViewController(_navigationController);
RootController.View.AddSubview(_navigationController.View);
添加滑动面板(PanelType.LeftPanel,280);
}
显示(请求);
}
而且是全班的
在努力使这项工作正常进行的过程中,我遗漏了什么?不确定我所做的是否“正确”,但它目前正在发挥作用。我仍然对更好的答案持开放态度 为了简单地解决这个问题,我所做的是添加对
SetWindowRootViewController(_navigationController)的调用代码>就在我调用base.Show(请求)
公共覆盖无效显示(MvxViewModelRequest请求)
{
_navigationController=null;
var viewController=(UIViewController)Mvx.Resolve().CreateView(请求);
RootController=新的UIViewController();
//这需要是一个选项卡视图
if(request.ViewModelType==typeof(AuthViewModel))
{
_navigationController=新的EmptyNavController(viewController);
RootController.AddChildViewController(_navigationController);
RootController.View.AddSubview(_navigationController.View);
}
else if(request.ViewModelType==typeof(RootViewModel))
{
_navigationController=新的滑动面板AVController(viewController);
RootController.AddChildViewController(_navigationController);
RootController.View.AddSubview(_navigationController.View);
添加滑动面板(PanelType.LeftPanel,280);
}
其他的
{
抛出新异常(“您试图显示的视图类型当前不受支持。”);
}
//就在这里
SetWindowRootViewController(_navigationController);
显示(请求);
}
public override void Show(MvxViewModelRequest request)
{
_navigationController = null;
var viewController = (UIViewController)Mvx.Resolve<IMvxTouchViewCreator>().CreateView(request);
RootController = new UIViewController();
// This needs to be a Tab View
if (request.ViewModelType == typeof(AuthViewModel))
{
_navigationController = new EmptyNavController(viewController);
RootController.AddChildViewController(_navigationController);
RootController.View.AddSubview(_navigationController.View);
}
else if (request.ViewModelType == typeof (RootViewModel))
{
_navigationController = new SlidingPanelsNavController(viewController);
RootController.AddChildViewController(_navigationController);
RootController.View.AddSubview(_navigationController.View);
AddSlidingPanel<NavigationFragment>(PanelType.LeftPanel, 280);
}
else
{
throw new Exception("They View Type you're trying to show isn't currently supported.");
}
// RIGHT HERE
SetWindowRootViewController(_navigationController);
base.Show(request);
}