对 Xamarin.iOS Storyboard 的 MVVMCross 支持

2024-02-24

由于支持即将制作稳定流的 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(使用前将#替换为@)

对 Xamarin.iOS Storyboard 的 MVVMCross 支持 的相关文章

随机推荐