Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
488 views
in Technique[技术] by (71.8m points)

ios - MvvMCross navigate back multiple viewmodels / truncate navigation stack

I have two questions regarding navigation in MvvMCross.

  1. How can I go back to a view model, that is on the navigation stack? Respectively: How can I go back a specified number of view models?
  2. How can I truncate the navigation stack?

    e.g: A|B|C on the stack, navigating to D makes the stack look like: D

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The functionality for manipulating the back stack is platform and app specific - e.g:

  • it's very different manipulating an Android activity backstack than an iOS UINavigation controller one
  • it depends on whether your app is using tabs, activities, fragments, flyouts, modals, hamburger menus, etc

Because of this, the actual implementation of UI changes like this is not defined within MvvmCross.

Instead, it's up to you to implement in your applications presenter.

The basic flow you'll need to follow is:

  1. Work out what your app structure is and what effect(s) you want to achieve

  2. For this effect, declare a custom presentation hint - e.g

    public class MyFunkyPresentationHint : MvxPresentationHint
    {
        public int DegreeOfFunkiness { get; set; } 
    }
  1. You can create and send this hint from any ViewModel
    base.ChangePresentation(new MyFunkyPresentationHint() { DegreeOfFunkiness=27 });
  1. In your custom presenter, you can then do the backstack-screen-hacking you desire:
    public override void ChangePresentation(MvxPresentationHint hint)
    {
        if (hint is MyFunkyPresentationHint)
        {
            // your code goes here
            return;
        }

        base.ChangePresentation(hint);
    }

For examples of custom presenters, see: http://slodge.blogspot.com/2013/06/presenter-roundup.html

For one example of backstack manipulation, see how Close(this) is implemented in some of the standard presenters.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...