呈现两个视图控制器,关闭正确的视图控制器

Posted

技术标签:

【中文标题】呈现两个视图控制器,关闭正确的视图控制器【英文标题】:Presenting two view controller, dismissing correct view controller 【发布时间】:2015-04-03 12:23:26 【问题描述】:

我有一个密码视图控制器,它总是在应用程序启动时显示。

我有另一个视图控制器,它在单击按钮时显示。在这个过程中,有一个过程要展示,一旦完成,就放弃自己。

场景是:

1) 呈现此视图控制器,进程开始。

2) 在此过程完成之前,请按主页按钮。

3) 现在再次打开应用程序。

4) 显示密码视图控制器,因为它是强制性的。

5) 此时,在步骤 1 中启动的过程完成。调用 Dismiss 方法。但是密码视图控制器被解除,而不是这个过程 VC。

我怎样才能解雇特定的 VC?

**Edit:**

我为此尝试了不同的方法。当我从 appdelegate 提供 passcodeVC 时,我创建了一个新导航并将其设置为 rootViewController。较早的 nav 存储在引用中。在这里,我成功地保持了密码视图。密码视图现在不会关闭。

当用户输入密码时,我将 rootviewcontroller 再次更改为旧的。我认为这会奏效。但是,事实并非如此。 MailVc 被解雇。当我再次尝试展示 mailVC 时,它会显示 this is already presented.

似乎,因为我更改了 rootVC,然后当它不在视图中时调用 dissmissVC。 谁能给我解释一下。

谢谢。

【问题讨论】:

您尝试过委托模式吗?也用于不作为控制器出现的过程,或者如果您正在这样做,只需在应用程序进入后台时保存进度并关闭进度控制器 是的。我使用委托解决了这个问题。但我想知道编辑后的问题。为什么会这样。当视图不在窗口根目录中并调用关闭时。视图被驳回。但后来当我再次尝试呈现时,它说已经呈现。甚至我创建了该类的新实例来呈现。 当你是 root 控制器时,rootVC 已经呈现了视图,所以当你在更改 rootVC 之前再次设置它时,只需关闭进度 VC 或者当应用程序进入后台时告诉你。 【参考方案1】:

在关闭当前视图控制器之前,您可以测试其类型。如果是kindOfClass (YourPasswordViewController),请不要关闭它。否则,请走开。

从执行计算并关闭当前UIViewController 的 UIViewController 中,执行以下操作。

获取实例到您的UINavigationController。获取viewControllers 属性。这是一个NSArray。访问最后一个UIViewController 并测试它是否是 PasswordUIViewController 的对象。如果是,请不要忽略它。

【讨论】:

好的。但是如何找到这个视图控制器。 navCtrl 具有 viewcontrollers 属性,可提供推送视图。如何获得呈现的视图。 @Durgaprasad 更新了我的答案。如果您有任何困惑,请告诉我 当我访问 nav.viewcontrollers 时,我得到 homeVc 和 mailVc 的数组。我没有得到视图控制器。有两个提供的 vc,即 mailVc 和 passcodeVC。 你还没有推送控制器,所以你不会得到当前的控制器状态?它的 viewController 方法

以上是关于呈现两个视图控制器,关闭正确的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

关闭两个模态视图控制器

无法关闭嵌入在导航控制器中的两个视图控制器

根视图控制器呈现的两个视图控制器之间的转换

从 uitabbarController 视图中关闭模态视图

如何关闭模态视图控制器,然后立即让呈现视图控制器呈现不同的模态视图控制器?

Swift:关闭所有视图控制器,然后呈现一个视图控制器