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