从堆栈弹出当前视图并推送新的Xamarin

时间:2016-05-31 16:16:32

标签: ios xamarin uiviewcontroller uinavigationcontroller xamarin.ios

我有一个应用程序,我在注册表单中,当用户单击提交时,它会将它们带到上一页。在上一页上,如果用户点击它,则会将它们带回到我不想要的注册页面。如何从堆栈中删除该注册视图?

这是我目前的做法:

//inside MyRegistrationController button press
MyPreviousController SVC = this.Storyboard.InstantiateViewController("MyPreviousController") as MyPreviousController;
            if(SVC != null){
                SVC.offender = offender;


                //var viewControllers = this.NavigationController.ViewControllers;
                //viewControllers[viewControllers.Length - 1].View.RemoveFromSuperview();
                //this.NavigationController.ViewControllers = viewControllers;

                this.NavigationController.PopViewController(true);
                this.NavigationController.PushViewController(SVC, true);
            }

这个当前的方法对堆栈有些奇怪,我点击MyRegistrationController上的按钮我转到MyPreviousController(未更新)然后快速转到MyPreviousController的更新版本回到MyPreviousController的更新版本然后如果我点击后退按钮,我会回到MyPreviousController

1 个答案:

答案 0 :(得分:3)

好的,我最终让它上班了。我的问题最终成了双重问题。一个我需要弹出视图,两个我需要MyPreviousController中的表格数据重新加载(我没有提出的问题)。所以我需要做以下事情:

要简单地弹出当前控制器,我只需说:

//inside MyRegistrationController button press
MyPreviousController SVC = this.Storyboard.InstantiateViewController("MyPreviousController") as MyPreviousController;
        if(SVC != null){
            SVC.offender = offender;

            this.NavigationController.PopViewController(true);
}

但是这样做会导致MyPrevious中的表格无法更新。所以我需要把它放在MyPreviousController.cs

public override void ViewWillAppear (bool animated)
    {
        base.ViewWillAppear (animated);
        InvokeOnMainThread (delegate {
            TableView.Source = source;
            TableView.ReloadData();
        });
    }

并成功更新了表并删除了注册视图