我在UITabBarController
中有两个标签,两个标签都是UINavigationControllers
。问题是NavigationService
的初始化需要UINavigationController
作为参数。我想找到一种方法,以root身份使用导航控制器,或者找到一种方法将制表符控制器作为root。
我最终有三个选择:
1.
/-> Ctrl 1 -> ctrl 2
Nav -> Tab -
\-> Ctrl 1 -> ctrl 2
此选项有效,但使用NavigateTo()
推送另一个控制器时标签栏会丢失。这不是一个解决方案,我确实需要在任何地方使用标签。
2.
/-> Nav -> Ctrl 1 -> ctrl 2
Tab -
\-> Nav -> Ctrl 1 -> ctrl 2
这根本不起作用,因为SimpleIoc
只需要UINavigationController
,并导致崩溃。显然,这根本不是解决方案。
3.
Navigate using segue or pushing controllers manually, the 'classic' way.
这完全违背了使用MVVM-Light的目的,这也不是解决方案。
我见过another post on Stack Overflow,他最终选择了选项3.我希望在这里找到别的东西。
任何人对此可能的解决方案有任何想法?或者我是SOL?
答案 0 :(得分:0)
我不太愿意说选项3破坏了MVVM-Light的目的,虽然不是很好,但是它是一个选项-最好将View注入到界面后面的ViewModel中,然后使用它进行导航。这样,您仍然可以从viewModel控制导航,并且由于“视图”位于界面的后面,因此您仍然可以测试viewModel的导航部分(可以在此处使用简单的模拟对象)。
我看到的另一种选择是只使用与项目密切相关的完全自定义的INavigationService。您可以在以下两个链接中看到执行此操作的项目:
我想,如果您创建一个自定义NavigationService,它将为您提供最终的控制权,并且您还可以访问历史记录,因此您可以选择显示viewControllers Modaly,推送它们或根据当前视图层次使用不同的动画。