ios - 关闭当前模态视图 Controller ,然后呈现新的模态视图 Controller

标签 ios swift modalviewcontroller presentmodalviewcontroller

我试图关闭一个模态 Controller ,然后通过按下第一个模态 Controller 上的按钮来呈现一个新的模型 Controller 。我试过这个:

dismiss(animated: true, completion: {_ in
                self.navigateToAtmDetail(atmId:id)

            })

但是一旦当前 View Controller 被关闭,它就会保持关闭状态并且不会导航到下一个 Controller 。此外,我们使用的是 nibs 而不是 Storyboard和 segues,所以我无法访问它们。知道如何关闭当前的模态视图 Controller 而不是呈现新的模态视图 Controller 吗?

最佳答案

我会尽量在这里给出一个更透彻的答案。在 iOS 中编程时,所有实例都必须从...其他实例创建。当我说实例时,我指的是已实例化的对象(已在计算机内存中创建的对象)。因此,无论何时使用 XCode 创建项目,都需要标记'初始 View Controller '(See that the bottom right says 'is initial View Controller, ask yourself... why does XCode really need to know that?')这将是您创建的第一个实例。然后它用于产生其他实例。 Apple 选择这种架构的原因是出于安全原因(我认为......?如果他们有更好的答案,请纠正我)。您可以非常清楚地看到 View 的所有“实例”。您在 XCode 中运行程序时单击此按钮 .然后您可以看到 View 的层次结构。我做了一个简单的程序,点击一个按钮将加载不同的 View 。在这里我没有点击按钮,我只加载了一个 View 。 Before I click the button and add a new view然而,在这里我点击了按钮并加载了下一个 View ,enter image description here .在顶部,他们都说 UIWindow。那是因为……(我希望你能猜到这部分!)它们都是从 UIWindow View 实例化的。不相信我?看一下这个!这是实际的 View 层次结构。 The one where the button has not been pressedThe one where the button has been pressed .所以,如果你不明白我的意思。您应该明白,只需阅读您的问题,就很明显您正试图从另一个您试图解雇的模型 Controller 实例化您的模型 Controller 。因此,如果模型 Controller 已被解雇,应该如何实例化另一个模型 Controller ?还要记住,最好只根据用途命名 Controller ,例如 MenuViewController、MainController 或 VideoController。模型这个词通常用在 MVC 中,它不应该用作 ViewControllers 名称的一部分。 (希望我听起来没有粗鲁大声笑,我曾经教过初中,所以这就是我教 XD 的方式)

关于ios - 关闭当前模态视图 Controller ,然后呈现新的模态视图 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47148762/

相关文章:

ios - Bolt-Swift : error handling

swift - 如何根据参数过滤 Firebase 事件?

ios - 如何从 modalViewController PushViewController

ios - 始终显示光标 UITextField

javascript - 无法在 Cordova iOS 应用程序中添加自动完成功能

ios - 在 UICollectionView 滚动后获取可见项的更新 IndexPath

objective-c - 用于呈现多个模态的 NSNotificationCenter?

iphone - 隐藏所有模态视图 Controller

ios - 以 NSException 类型的未捕获异常终止 - 删除 TableView 行

swift - 使用随机数选择变量