Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove ViewController from stack

In our App we have a log-in ViewController A. On user log-in, a request navigate is automatically called to navigate to the next ViewController B. However when this is done we want to remove the log-in ViewController A from the stack so the user cannot "go back" to the log-in view but goes back the previous ViewController before the log-in instead.

We thought about removing the ViewController A from the stack when ViewController B is loaded, but is there a better way?

In the Android version of the App we've set history=no (if I recall correctly) and then it works.

Is there an similar way to achieve this in MonoTouch and MvvmCross?

like image 642
Bjarke Avatar asked Sep 03 '26 15:09

Bjarke


1 Answers

I ended up with removing the unwanted viewcontroller from the navigation controller. In ViewDidDisappear() of my login ViewController I did the following:

public override void ViewDidDisappear (bool animated)
{
    if (this.NavigationController != null) {
        var controllers = this.NavigationController.ViewControllers;
        var newcontrollers = new UIViewController[controllers.Length - 1];
        int index = 0;
        foreach (var item in controllers) {
            if (item != this) {
                newcontrollers [index] = item;
                index++;
            }

        }
        this.NavigationController.ViewControllers = newcontrollers;
    }
    base.ViewDidDisappear(animated);
}

This way I way remove the unwanted ViewController when it is removed from the view. I am not fully convinced if it is the right way, but it is working rather good.

like image 54
Bjarke Avatar answered Sep 05 '26 16:09

Bjarke