UINavigationController

UINavigationController

我正在使用Xamarin.iOS和MvvmCross5.x。我的根视图是Tabs Controller,我希望任何显示子项的请求都将迫使堆栈导航超出选项卡(而不是内部)。

因此,我将根视图定义如下:

[MvxFromStoryboard]
[MvxRootPresentation(WrapInNavigationController = true)]
public partial class HomeView : MvxTabBarViewController<HomeViewModel>

不幸的是,根导航控制器不是UINavigationController(正如我期望基于属性的那样),而是HomeView,它实质上是选项卡式视图,并且我无法实现我的目标。

然后,我覆盖了ios演示者,以手动创建根UINavigationController:
public class MySuperCoolIosViewPresenter : MvxIosViewPresenter
{
    private UINavigationController _rootViewController;

    public MySuperCoolIosViewPresenter(IMvxApplicationDelegate applicationDelegate, UIWindow window)
        : base(applicationDelegate, window)
    {
    }

    protected override void SetWindowRootViewController(UIViewController controller)
    {
        _rootViewController = new UINavigationController(controller);
        base.SetWindowRootViewController(_rootViewController);
    }

    protected override void ShowChildViewController(UIViewController viewController, MvvmCross.iOS.Views.Presenters.Attributes.MvxChildPresentationAttribute attribute, MvxViewModelRequest request)
    {
        _rootViewController.ShowViewController(viewController, _rootViewController);
    }
}

但是,当尝试使用以下错误设置控制器base.SetWindowRootViewController(_rootViewController)时,此代码在MvvmCross的深处某处失败:
System.NullReferenceException: Object reference not set to an instance of an object\n
at MvvmCross.iOS.Views.Presenters.MvxIosViewPresenter.CloseTabBarViewController () [0x00036] in <861dee92d7924acc93d876339b4b95f9>:0
at MvvmCross.iOS.Views.MvxTabBarViewController.ViewWillDisappear (System.Boolean animated) [0x0001f] in <861dee92d7924acc93d876339b4b95f9>:0
at (wrapper managed-to-native) ObjCRuntime.Messaging:void_objc_msgSend_IntPtr (intptr,intptr,intptr)
at UIKit.UIWindow.set_RootViewController (UIKit.UIViewController value)

我如何在不为根视图创建额外的ViewModel和View的情况下实现我的目标(我不喜欢这种方法,因为在这种情况下,Android会吓坏了)

最佳答案

我创建了此样本,其中包含您所需要的:https://github.com/rrispoli/SampleTabs

10-07 19:14
查看更多