我目前正在使用 Xamarin 和MVVMCross 6开发iOS 应用程序,我想创建一个“SplitView”。
SplitView 应包含一个主页面和一个详细信息页面。在纵向模式下,仅应显示主页面或详细信息页面。
如果设备的屏幕足够大,则应该显示两个页面。在母版页上执行操作时,详细信息页应该会发生变化。
如果有人能简要解释实现这样的 SplitView 需要哪些故事板元素、视图、ViewModel 和导航元素,那就太好了。
请不要简单地链接到页面:https ://www.mvvmcross.com/documentation/plugins/ios-sidebar?scroll=1300
感谢你并致以真诚的问候
补充:到目前为止我做了什么。 我经常实现从一个页面到另一个页面的“正常”导航,没有问题。我使用 Designer 在 StoryBoard 上放置了一个 SplitViewController。然后我为每个控制器创建了一个 .cs 文件(例如 RootViewController.cs)。
视图如下所示:
[MvxFromStoryboard("LaunchScreen")]
public partial class MasterViewController : MvxViewController<MasterViewModel>
然后我创建了一个 Root、Master 和 Detail ViewModel。导航到 RootViewModel 时
await _navigationService.Navigate<RootViewModel>();
但后来我收到以下错误:
$exception {System.NullReferenceException:对象引用未设置为 MvvmCross.ViewModels.MvxViewModelLoader.LoadViewModel 处的对象实例(MvvmCross.ViewModels.MvxViewModelRequest 请求,MvvmCross.ViewModels.IMvxBundle savedState,MvvmCross.Navigation.EventArguments.IMvxNavigateEventArgs navigationArgs)[ 0x00000] 在 D:\a\1\s\MvvmCross\ViewModels\MvxViewModelLoader.cs:62 在 MvvmCross.Platforms.Ios.Views.MvxViewControllerExtensions.LoadViewModel (MvvmCross.Platforms.Ios.Views.IMvxIosView iosView) [0x0004d] 在 D :\a\1\s\MvvmCross\Platforms\Ios\Views\MvxViewControllerExtensions.cs:36 在 MvvmCross.Views.MvxViewExtensions.OnViewCreate (MvvmCross.Views.IMvxView 视图, System.Func`1[TResult] viewModelLoader) [0x00012]在 D:\a\1\s\MvvmCross\Views\MvxViewExtensions.cs:24 在 MvvmCross.Platforms.Ios。Views.MvxViewControllerExtensions.OnViewCreate (MvvmCross.Platforms.Ios.Views.IMvxIosView iosView) [0x00000] 在 D:\a\1\s\MvvmCross\Platforms\Ios\Views\MvxViewControllerExtensions.cs:17 在 MvvmCross.Platforms.Ios。 Views.MvxViewControllerAdapter.HandleViewDidLoadCalled (System.Object sender, System.EventArgs e) [0x00000] 在 D:\a\1\s\MvvmCross\Platforms\Ios\Views\MvxViewControllerAdapter.cs:24 at (wrapper delegate-invoke) 。 invoke_void_object_EventArgs(object,System.EventArgs) at MvvmCross.Base.MvxDelegateExtensions.Raise (System.EventHandler eventHandler, System.Object sender) [0x00000] in D:\a\1\s\MvvmCross\Base\MvxDelegateExtensions.cs:13 at D:\a\1\s\MvvmCross\Platforms\Ios\Views\Base\MvxEventSourceViewController.cs 中的 MvvmCross.Platforms.Ios.Views.Base.MvxEventSourceViewController.ViewDidLoad () [0x00006]:62 在 MvvmCross.Platforms.Ios.Views.MvxViewController.ViewDidLoad () [0x00000] 在 D:\a\1\s\MvvmCross\Platforms\Ios\Views\MvxViewController.cs:60 at (wrapper managed-to-native) ObjCRuntime.Messaging.void_objc_msgSend_IntPtr(intptr,intptr,intptr)
在 /Library/Frameworks/Xamarin.iOS.framework/Versions/13.10.0.17/src/Xamarin.iOS/UIWindow.g.cs:394 在 MvvmCross.Platforms 中的 UIKit.UIWindow.set_RootViewController(UIKit.UIViewController 值)[0x0000d] .Ios.Presenters.MvxIosViewPresenter.SetWindowRootViewController(UIKit.UIViewController 控制器,MvvmCross.Platforms.Ios.Presenters.Attributes.MvxRootPresentationAttribute 属性)[0x00025] 在 D:\a\1\s\MvvmCross\Platforms\Ios\Presenters\MvxIosViewPresenter. cs:624 在 MvvmCross.Platforms.Ios.Presenters.MvxIosViewPresenter.SetupWindowRootNavigation (UIKit.UIViewController viewController, MvvmCross.Platforms.Ios.Presenters.Attributes.MvxRootPresentationAttribute 属性) [0x00023] 在 D:\a\1\s\MvvmCross\Platforms \Ios\Presenters\MvxIosViewPresenter.cs:260 在 MvvmCross.Platforms.Ios.Presenters.MvxIosViewPresenter。ShowRootViewController (UIKit.UIViewController viewController, MvvmCross.Platforms.Ios.Presenters.Attributes.MvxRootPresentationAttribute 属性, MvvmCross.ViewModels.MvxViewModelRequest 请求) [0x00267] 在 D:\a\1\s\MvvmCross\Platforms\Ios\Presenters\MvxIosViewPresenter. cs:198 } System.NullReferenceException
感谢你并致以真诚的问候。