首页 文章

关闭当前模态视图控制器,然后显示新的模态视图控制器

提问于
浏览
1

我试图解除一个模态控制器,然后通过按下第一个模态控制器上的按钮来呈现一个新的模型控制器 . 我试过这个:

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

            })

但是一旦当前视图控制器被解除,它就会被解雇并且不会导航到下一个控制器 . 此外,我们使用笔尖而不是故事板和segues,所以我将无法访问这些 . 知道如何解除当前模态视图控制器而不是提出新的模态视图控制器吗?

2 回答

  • 1

    我会尝试在这里给出更多答案 . 在iOS中编程时,必须从其他实例创建所有实例 . 当我说实例时,我指的是一个已经实例化的对象(一个已在计算机内存中创建的对象) . 因此,无论何时使用XCode创建项目,都需要标记 'the initial view controller' .
    (See that the bottom right says 'is initial View Controller, ask yourself... why does XCode really need to know that?')
    这将是您创建的第一个实例 . 然后它用于产生其他实例 . Apple选择这种架构的原因是出于安全考虑(我认为......如果有更好的答案,有人会纠正我) . 您可以看到所有'instances'视图的非常清晰的视图 . 在XCode

    中运行程序时单击此按钮 . 然后,您可以看到视图的层次结构 . 我做了一个简单的程序,单击按钮将加载不同的视图 . 在这里我没有点击按钮,我只加载了一个视图 .
    Before I click the button and add a new view
    但是在这里我点击了按钮并加载了下一个视图
    enter image description here
    . 在顶部,他们都说 UIWindow . 那是因为......(我希望你能猜到这一部分!)它们都是从UIWindow View中实例化的 . 不相信我?看一下这个!以下是实际的视图层次结构 .
    The one where the button has not been pressed

    The one where the button has been pressed
    . 所以,在你没有得到我的观点的情况下 . 您应该明白,只需阅读您的问题,很明显您尝试从另一个您试图解雇的模型控制器实例化您的模型控制器 . 因此,如果模型控制器被解雇,它应该如何实例化另一个模型控制器?另外请记住,最好只在MenuViewController,MainController或VideoController之后命名控制器 . 单词模型通常在MVC中使用,不应将其用作ViewControllers名称的一部分 . (希望我听起来不是粗鲁的哈哈,我曾经指导初中,所以这就是我教XD的方法)

  • 4

    尝试:

    let presenting = (self.presentingViewController.childViewControllers[0] as! <VIEWCONTROLLERTYPE>) //Or whatever index your controller is!
    dismiss(animated: true, completion: {_ in
                    presenting.navigateToAtmDetail(atmId:id)
    
                })
    

    您的呈现控制器的类型在哪里 . 您还必须将 navigateToAtmDetail 方法移动到另一个控制器

    简短的解释(更好,下面的答案中的详细解释)是你可以't present the new controller off a controller that has already been dismissed. So we want to reach back to the controller that'呈现我们( presentingViewController ),恰好是 navigationViewController . 这没有我们想要的逻辑,所以我们需要子视图控制器( childViewControllers[x] ) . 然后我们命令该控制器执行下一个表示逻辑 . 祝好运!

相关问题