关闭一个 ViewController 并在 iOS 中启动另一个(不是重复的,其他答案不起作用)

Posted

技术标签:

【中文标题】关闭一个 ViewController 并在 iOS 中启动另一个(不是重复的,其他答案不起作用)【英文标题】:Dismissing a ViewController and starting another in iOS (not a duplicate, other answers don't work) 【发布时间】:2016-06-10 14:40:10 【问题描述】:

我有一个 android 应用程序,我正在尝试使用 Xcode 和 Swift 为 ios 重新创建它。它从一个动画屏幕开始,它检查了一些事情,然后调用finish(),并打开一个我也调用finish() 的登录屏幕来启动应用程序的主要活动。有时我用finish() 关闭主要活动并再次打开登录屏幕。我不知道如何在 Swift 中做到这一点。

当我在呈现新视图控制器后尝试在 Swift 中关闭视图控制器时,它会关闭新视图控制器而不是旧视图控制器。重新排列这些行也不起作用。

我还尝试了一种在呈现新视图控制器后关闭当前视图控制器的完成方法,以及在关闭旧视图控制器后呈现新视图控制器的完成方法。这两个选项都不起作用。这是一个例子:

视图控制器的解雇:

self.dismissViewControllerAnimated(true, completion: present)

present() 方法:

    func present() 
    let vc = self.storyboard!.instantiateViewControllerWithIdentifier("LoginViewController") as! LoginViewController
    self.presentViewController(vc, animated: true, completion: nil)

我希望有独立的 ViewControllers,它们不相互依赖,所以我没有一堆无休止的堆叠。

【问题讨论】:

展示新的,而不放弃旧的。当你想回到旧的。关闭新的。 是的,但以这个为例:如果用户没有帐户:开始->登录->(未注册)注册->验证注册->主视图控制器如果用户有帐户:开始-> 登录 -> 主视图控制器 如果用户必须再次登录,我是否不必让应用程序返回所有视图控制器直到登录? 如果你想继续前进 - 现在。如果你想倒退 - 解雇。我不明白这里的问题...... 问题是我想启动新的视图控制器,而不是在视图控制器堆栈中添加无尽的视图控制器。我如何做到这一点,而不需要编写大量的展开序列来让我开始并发送一条消息来呈现我想要呈现的视图控制器?在 Android 中,它实际上需要两行代码:startActivity(...) 和 finish() 如果你继续呈现同一个视图控制器,它不会添加到控制器堆栈中,它只会呈现一个已经存在的控制器 【参考方案1】:

您只能关闭导航堆栈中的现有视图控制器。 尝试关闭现有的视图控制器,然后呈现你想要的 VC

【讨论】:

以上是关于关闭一个 ViewController 并在 iOS 中启动另一个(不是重复的,其他答案不起作用)的主要内容,如果未能解决你的问题,请参考以下文章

如何关闭当前的 ViewController 并在 Swift 中更改为新的 ViewController?

如何关闭当前的 ViewController 并在 Swift 中转到另一个视图

如何将第二个viewcontroller文本字段值传递给第一个viewcontroller数组并在swift4中点击按钮时关闭

关闭一个 ViewController 并呈现另一个 ViewControlloer - IOS - Swift 3

模态viewController关闭按钮问题

防止我的 iOS 8 iPad 操作表关闭它的父 ViewController?