Xamarin iOS:在当前选项卡栏项中替换视图控制器

问题描述 投票:0回答:1

我刚开始从事Xamarin iOS(本机)开发,所以在我解释我们要做的事情时,请多多包涵。

我有一个故事板Main.storyboard,在其中设计并构建了一个选项卡栏控制器,以及几个自定义视图控制器,其中一些作为选项卡链接在一起。在第一个选项卡上,如果他们尚未登录,则有一个登录屏幕。但是,如果他们已登录,我想显示在同一情节提要中存在的其他视图控制器(帐户)中定义的视图。

在LoginController的ViewDidLoad()重写中,我有以下代码,我认为它将显示“已登录”帐户视图控制器:

this.PresentViewController(new AccountController(), true, null);

此代码行执行没有错误,但是仍显示“登录”视图。 AccountController中的ViewDidLoad()覆盖不会触发。

问题1:这是正确的调用方法,以便用另一个替换当前的视图控制器吗?

现在,如果我在异步按钮处理程序方法中放置这完全相同的代码行(特别是Facebook SDK登录按钮的Completed事件),它实际上在AccountController中命中了ViewDidLoad()重写,但是我在行,仅引用情节提要/视图中定义的按钮。

问题2:为什么来自事件处理程序的相同精确调用的行为会如此不同?

最后,如果我将AccountController设置为选项卡栏选项卡,则ViewDidLoad()中引用该按钮的代码将按预期工作。

到目前为止,我所有不同视图的加载和卸载都由UITabBarController自动处理,但是现在我正在尝试进行一些手动转换,因此我很难找到合适的文档已过时,并适用于我的特定设置。

xamarin xamarin.ios uitabbarcontroller uistoryboard
1个回答
0
投票

Generally,我们可以使用PresentViewController导航到Navigation Controller中的另一个页面,这应该是一种安全,简便的方法。

enter image description here

Pop

enter image description here

HoweverPresentModalViewController是ViewController模型,尽管它看起来与PresentViewController相同。它不需要在导航控制器中,并且始终在单个视图中使用需要暂时显示,很快便会消失。

如果场景需要在运行时重置RootViewController,可以认为这是导航的第三种方法。

var storyboard = UIStoryboard.FromName("Main", null);
var anotherController = storyboard.InstantiateViewController("AnotherViewController") as AnotherViewController;
UIWindow window =  UIApplication.SharedApplication.KeyWindow;
if(window != null)
{
    window.RootViewController = anotherController;
}

In addittion,这将是不安全的使用方式,最好在当前的ViewController dismiss方法中使用它们:

DismissViewController(true, () => {
      // Set Root View Controller
});
© www.soinside.com 2019 - 2024. All rights reserved.