由于支持即将制作稳定流的 iOS 故事板的 XS 集成,我希望能够将此功能与 MVVMCross 结合使用。
从根本上来说,它似乎确实有点不应该工作,因为故事板指示视图项目中的导航层次结构,而不是像 MVVMCross 这样的视图模型项目。
但如果有一种方法可以让两者协同工作,那就太棒了。
有谁知道如何实现这一目标?
干杯,特里斯坦
至少有一个已发布的示例显示了故事板的使用 - 名称相当奇怪eh
- https://github.com/slodge/eh https://github.com/slodge/eh
该样本的工作者:
- 让 Storyboard 控制导航
- using
MvxViewController
作为 VC 基类(代替UIViewController
)
- 手动设置
ViewModel
在一种情况下 - 直接设置before呼叫base.ViewDidLoad()
- see https://github.com/slodge/eh/blob/master/storyb/RootViewController.cs#L23 https://github.com/slodge/eh/blob/master/storyb/RootViewController.cs#L23
- 手动设置
Request
在一种情况下——在Segue
导航 - 参见https://github.com/slodge/eh/blob/master/storyb/RootViewController.cs#L40 https://github.com/slodge/eh/blob/master/storyb/RootViewController.cs#L40
使用这样的方法,可以很容易地将 Mvx 数据绑定添加到主要由 Storyboard 驱动的应用程序中。
或者,如果开发人员更愿意让 MvxShowViewModel
导航系统控制屏幕的流动 - 但也更喜欢在故事板中设计这些屏幕,那么这可以通过开发正常的 MvvmCross 应用程序来实现,但使用自定义Presenter
它从故事板加载 ViewController。
在 MvvmCross v3.1.1 中,您可以在ViewsContainer
level:
- 覆盖一个类
MyContainer
from MvxTouchViewsContainer.cs
- 覆盖该方法
protected virtual IMvxTouchView CreateViewOfType(Type viewType, MvxViewModelRequest request)
- see https://github.com/MvvmCross/MvvmCross/blob/b8545752f28f4e569efeaa397c3085b0373e4d8b/Cirrious/Cirrious.MvvmCross.Touch/Views/MvxTouchViewsContainer.cs#L40 https://github.com/MvvmCross/MvvmCross/blob/b8545752f28f4e569efeaa397c3085b0373e4d8b/Cirrious/Cirrious.MvvmCross.Touch/Views/MvxTouchViewsContainer.cs#L40
-
在此覆盖中,加载基于 Storyboard 的 ViewController:
protected override IMvxTouchView CreateViewOfType(Type viewType, MvxViewModelRequest request)
{
return (IMvxTouchView)UIStoryboard.FromName("MyStoryBoard", null)
.InstantiateViewController(viewType.Name);
}
-
创造你的MyContainer
during Setup
-
protected override IMvxTouchViewsContainer CreateTouchViewsContainer()
{
return new MyContainer();
}
那应该就可以了...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)