Jed*_*per 26 mvvmcross xamarin
由于支持iOS故事板的XS集成即将制作Stable流,我希望能够将此功能与MVVMCross结合使用.
从根本上说它似乎有点像它不应该工作,因为故事板指示视图项目中的导航层次结构,而不是像MVVMCross那样的视图模型项目.
但是,如果有办法使两者协同工作,那将是非常棒的.
有谁知道如何实现这一目标?
干杯,特里斯坦
Stu*_*art 30
至少发布了一个样本,显示故事板的使用 - 相当奇怪的命名eh- https://github.com/slodge/eh
该样本的工作原理是:
MvxViewController作为VC基类(代替UIViewController)ViewModel一个案例 - 通过在调用之前直接设置base.ViewDidLoad()- 请参阅https://github.com/slodge/eh/blob/master/storyb/RootViewController.cs#L23Request在一个案例中手动设置- 在Segue导航期间- 请参阅https://github.com/slodge/eh/blob/master/storyb/RootViewController.cs#L40使用这样的方法,将Mvx Data-Binding添加到主要由Storyboard驱动的应用程序中非常容易.
或者,如果开发人员更愿意让Mvx ShowViewModel导航系统控制屏幕流 - 但也希望在故事板中设计这些屏幕,那么可以通过开发一个普通的MvvmCross应用程序,但使用Presenter从中加载ViewControllers 的自定义故事板.
在MvvmCross的v3.1.1中,您可以在以下ViewsContainer级别执行此操作:
MyContainer从MvxTouchViewsContainer.csprotected virtual IMvxTouchView CreateViewOfType(Type viewType, MvxViewModelRequest request)- 请参阅https://github.com/MvvmCross/MvvmCross/blob/b8545752f28f4e569efeaa397c3085b0373e4d8b/Cirrious/Cirrious.MvvmCross.Touch/Views/MvxTouchViewsContainer.cs#L40在此覆盖中,加载基于Storyboard的ViewControllers:
protected override IMvxTouchView CreateViewOfType(Type viewType, MvxViewModelRequest request)
{
return (IMvxTouchView)UIStoryboard.FromName("MyStoryBoard", null)
.InstantiateViewController(viewType.Name);
}
Run Code Online (Sandbox Code Playgroud)创造你的MyContainer期间Setup-
protected override IMvxTouchViewsContainer CreateTouchViewsContainer()
{
return new MyContainer();
}
Run Code Online (Sandbox Code Playgroud)那就应该工作......
Gei*_*erg 11
在一个大型项目中,将所有视图保留在一个故事板中可能会令人生畏.
我更喜欢每个视图创建一个故事板; 我在Stuart的答案中修改了Container,以查找与视图类匹配的故事板,如果找不到,则回退到主故事板:
public class StoryBoardContainer : MvxTouchViewsContainer
{
protected override IMvxTouchView CreateViewOfType(Type viewType, MvxViewModelRequest request)
{
UIStoryboard storyboard;
try
{
storyboard = UIStoryboard.FromName(viewType.Name, null);
}
catch (Exception)
{
storyboard = UIStoryboard.FromName("StoryBoard", null);
}
return (IMvxTouchView) storyboard.InstantiateViewController(viewType.Name);
}
}
Run Code Online (Sandbox Code Playgroud)
警告1:要以这种方式实例化viewcontrollers,您必须在编辑器中设置Storyboard ID:

警告2:确保您继承的视图MvxViewController具有构造函数public MyView(IntPtr handle) : base(handle),因为它用于从故事板中实例化视图控制器.
| 归档时间: |
|
| 查看次数: |
7914 次 |
| 最近记录: |