呈现两个视图控制器,关闭正确的视图控制器
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 视图中关闭模态视图