MvvmCross 6.x TipCalc iOS示例无法运行:无Xib视图控制器选项
解决MvvmCross 6.x iOS项目Storyboard视图不显示的问题
嘿,作为刚踩过MvvmCross 6.x相关坑的过来人,我帮你梳理下可能遗漏的关键步骤——毕竟用Storyboard配合MvvmCross确实有几个容易忽略的细节:
1. 确保MvxFromStoryboard属性配置正确
你的视图控制器类必须满足两个核心要求:
- 继承自MvvmCross的专属基类,比如
MvxViewController(而不是原生的UIViewController) - 明确指定对应Storyboard的名称,比如你的Storyboard文件名为
TipView.storyboard,代码要这么写:
要是Storyboard是项目根目录的[MvxFromStoryboard("TipView")] public class TipViewController : MvxViewController<TipViewModel> { // 必须保留这个构造函数,Storyboard实例化控制器会用到它 public TipViewController(IntPtr handle) : base(handle) { } }Main.storyboard,属性里可以省略名称,但明确指定能避免歧义。
2. 检查Storyboard文件的基础配置
- 选中你的Storyboard文件,在属性窗口里确认Build Action设置为
InterfaceDefinition(这是Storyboard能被正确编译识别的关键) - 打开Storyboard,选中目标视图控制器,在Identity Inspector面板中:
- Class要和代码里的类名完全一致(包括命名空间)
- Storyboard ID必须填写和类名相同的值(MvvmCross会通过这个ID匹配对应的控制器)
3. 确认ViewModel与导航配置
- 核心项目里的ViewModel必须继承
MvxViewModel基类 - 在iOS项目的
Setup类中,确保InitializeFirstViewModel()方法正确导航到你的目标ViewModel:protected override void InitializeFirstViewModel() { NavigationService.Navigate<TipViewModel>(); }
4. 验证Setup类的正确性
你的iOS项目Setup类必须继承MvxIosSetup<App>(其中App是你核心项目的MvvmCross应用类),并且确保初始化逻辑完整:
public class Setup : MvxIosSetup<App> { protected override IMvxApplication CreateApp() { return new App(); } }
5. 清理缓存并重建项目
VS2017的iOS项目偶尔会因为缓存导致资源不更新,建议按以下步骤操作:
- 清理解决方案(Build → Clean Solution)
- 删除iOS项目的
bin和obj文件夹 - 重新生成解决方案并运行
另外补充下:VS2017的iOS模板确实默认没有直接添加带Xib的ViewController选项,你可以通过添加Empty View然后手动创建对应的Xib文件,但既然你已经选择了Storyboard,先搞定上面这些步骤应该就能解决视图不显示的问题。
内容的提问来源于stack exchange,提问作者WPF_DEV
相关产品推荐
相关产品推荐

