MvvmCross ViewModel从左边过渡

我正在使用MvvmCross开发iOS应用程序。 在我的意见之一,我有一些基本的报表数据显示在一个tableview。

当触摸表格行时,通过调用ShowViewModel传递一个Dictionary中的一些参数来显示包含详细报告的新视图。 这工作正常。

当用户向左或向右滑动时,应用程序需要显示原始列表中下一个或上一个项目的详细报告。 我这样做是通过更新一些参数并再次调用ShowViewModel。 这背后的逻辑工作正常。

我的问题; ShowViewModelanimation从右侧进入的新视图。 当用户向左滑动时,这是完美的。 然而,当向右滑动时,似乎违反了直觉。 我怎样才能使ShowViewModelanimation或从左侧过渡?

如果您在这里查看MvvmCross源代码,您将看到默认行为是如何显示ViewController的

您需要通过执行以下操作来更改 : 如何在基于导航的应用程序中更改推送和stream行animation

为此,一个想法是有一个自定义视图主持人和捕获导航到特定的视图模型(重写显示(IMvxTouchView视图))

或者,也许从UINavigationController派生,将其设置为MvvmCross以使用它(查看MvxSetup),并在某些事件更改转换到该特定的视图

类似于这个问题如何在iPhone上指定视图转换

这是我能够在Andrei N的回答中提供有用的指针的解决scheme。最后,当在详细报告之间滚动时,我select了TransitionFlipFromRight和TransitionFlipFromLeft。 希望对别人有用。

我已经有一个inheritance自MvxModalSupportTouchViewPresenter的演示者类

public class BedfordViewPresenter : MvxModalSupportTouchViewPresenter 

在这个类中,我添加了一个MvxPresentationHint的属性。

 private MvxPresentationHint _presentationHint; 

在方法ChangePresentation的覆盖中,上述属性用于存储传入的参数

  public override void ChangePresentation (MvxPresentationHint hint) { _presentationHint = hint; base.ChangePresentation (hint); } 

两个新的MvxPresentationHint类被声明(见后面)

在演示者类中,Show方法被覆盖

  public override void Show(IMvxTouchView view) { if (_presentationHint is FlipFromRightPresentationHint) { var viewController = view as UIViewController; MasterNavigationController.PushControllerWithTransition (viewController, UIViewAnimationOptions.TransitionFlipFromRight); } else if (_presentationHint is FlipFromLeftPresentationHint) { var viewController = view as UIViewController; MasterNavigationController.PushControllerWithTransition (viewController, UIViewAnimationOptions.TransitionFlipFromLeft); } else { base.Show (view); } _presentationHint = null; } 

提供扩展到UINavigationController的新类是使用PushControllerWithTransition方法创build的

 public static class UINavigationControllerExtensions { public static void PushControllerWithTransition(this UINavigationController target, UIViewController controllerToPush, UIViewAnimationOptions transition) { UIView.Transition(target.View, 0.75d, transition, delegate() { target.PushViewController(controllerToPush, false); }, null); } } 

现在需要定义的是两个新的MvxPresentationHint类派生。 这些属于你的核心类库项目,而不是iOS应用程序项目。

 public class FlipFromLeftPresentationHint : MvxPresentationHint { public FlipFromLeftPresentationHint () { } } 

 public class FlipFromRightPresentationHint: MvxPresentationHint { public FlipFromRightPresentationHint () { } } 

我希望这是帮助别人尝试做类似的事情