首页 > 解决方案 > MVVMCross 中从 4.4 迁移到 5.7 时出现 CustomPresenter 错误

问题描述

你好 stackoverflowers,我正在开发一个使用 MVVMCross 和 Xamarin for iOS 和 Android 构建的项目。我发现该项目使用了一个相当旧版本的 MVVMCross (4.4.0),我正试图将它升级到当前版本 (6.4)。我认为首先升级到 5.7 是个好主意,在稍后阶段,当我将导航切换到新表单等时,我会升级到 6++。我已经成功地将android版本运行到5.7,但是,iOS版本使用customPresenter,我不太清楚如何转换为5.1中引入的新Presenter。我认为我的自定义演示者基于一段时间未更新的https://github.com/MvvmCross/MvvmCross-Samples/tree/master/XPlatformMenus/XPlatformMenusTabs.iOS 。

在我的子类 MvxIosViewPresenter 的 MvxTabPresenter 中,显示函数不再是可重写的。此外 IMvxModalIosView 似乎不再存在。

public override void Show(IMvxIosView view)
        {
            if (view is IMvxModalIosView)
            {
                if (this._currentModalViewController != null)
                {
                    return;
                }

                var currentModalViewController = view as MvxViewController;
                this._currentModalViewController = currentModalViewController;
                currentModalViewController.ModalPresentationStyle = UIModalPresentationStyle.Popover;
                CurrentTopViewController.AddChildViewController(currentModalViewController);
                currentModalViewController.View.Frame = CurrentTopViewController.View.Bounds.Inset(10, 10);
                currentModalViewController.View.Alpha = 0;
                CurrentTopViewController.View.Add(currentModalViewController.View);
                currentModalViewController.DidMoveToParentViewController(CurrentTopViewController);

                UIView.Animate(0.25, () =>
                {
                    currentModalViewController.View.Alpha = 1;
                });


                //this.PresentModalViewController(currentModalViewController, true);
                return;
            }

            if (view is HomeView)
            {
                if (this.CurrentTopViewController is MvxTabBarViewController)
                {
                    TabBarPresenter.SelectedIndex = 0;
                    return;
                } 


 public override void CloseModalViewController()
        {
            if (this._currentModalViewController != null)
            {
                this._currentModalViewController.DismissModalViewController(true);
                _currentModalViewController.WillMoveToParentViewController(null);
                _currentModalViewController.View.RemoveFromSuperview();
                _currentModalViewController.RemoveFromParentViewController();
                this._currentModalViewController = null;
                return;
            }

            base.CloseModalViewController();
        }

            }

这也不再可以从超类中覆盖。

关于如何解决这个问题的任何建议?

亲切的问候,V

标签: c#xamarinxamarin.iosmvvmcross

解决方案


正如您在MvxIosViewPresenter中看到的那样,现在 mvx 属性已注册到应调用的操作中。

所以,首先你应该继承自MvxIosViewPresenter. 然后,对于模态,您应该覆盖ShowModalViewController.

我建议您阅读 repo 上的文档MvxIosViewPresenterMvxAttributeViewPresenter文件,以了解它是如何工作的。

HIH


推荐阅读