gpt4 book ai didi

ios - 将标签栏与 MVVM Light (iOS) 结合使用

转载 作者:可可西里 更新时间:2023-11-01 04:55:54 24 4
gpt4 key购买 nike

我在 UITabBarController 中有两个选项卡,它们都是 UINavigationControllers。问题是 NavigationService 的初始化需要一个 UINavigationController 作为参数。我想找到一种方法让带有导航 Controller 的选项卡作为根,或者找到一种方法让选项卡 Controller 作为根。

我最终有三个选择:

1. 

/-> Ctrl 1 -> ctrl 2
Nav -> Tab -
\-> Ctrl 1 -> ctrl 2

此选项有效,但当使用 NavigateTo() 推送另一个 Controller 时,标签栏会丢失。这不是解决方案,我确实需要所有选项卡。

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?

最佳答案

我不会说选项 3 违背了 MVVM-Light 的目的,虽然它不是很好,但它是一个选项 - 将 View 注入(inject)界面后面的 ViewModel,然后使用它进行导航可能更可取。通过这种方式,您仍然可以从 viewModel 控制导航,并且它还允许您仍然测试 viewModel 的导航部分,因为“ View ”在界面后面(可以在此处使用简单的模拟对象)。

我看到的另一种选择是只使用与您的项目密切相关的完全自定义的 INavigationService。您可以在这两个链接中看到执行这些操作的项目:

https://github.com/losi999/XamarinSample/blob/f46e9cb1b1c152ff4510123f53b9d8bd9ddacdcf/XamarinSample.Core/Services/INavigationService.cs

https://github.com/mstein11/Happimeter/blob/691501f397a9c86d400a1fe4fe94bb866588a98e/iOS/Services/NativeNavigationService.cs

我想如果您创建一个自定义 NavigationService,它将为您提供最终控制权,并且您还可以访问历史记录,因此您可以选择以模式方式显示 viewControllers,推送它们或使用不同的动画,具体取决于当前的 View 层次结构。

关于ios - 将标签栏与 MVVM Light (iOS) 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39596945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com