繁体   English   中英

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

[英]Dismiss current modal view controller and then present new modal view controller

我试图关闭模式控制器,然后通过按第一个模式控制器上的按钮来显示新的模型控制器。 我已经试过了:

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

            })

但是当前的视图控制器一经关闭,它就会保持关闭状态,并且不会导航到下一个控制器。 另外,我们使用的是笔尖,而不是情节提要和segues,所以我将无法使用它们。 有什么想法比当前的模态视图控制器更能解散当前的模态视图控制器吗?

我会在这里尝试给出更多答案。 在iOS中进行编程时,必须从其他实例创建所有实例。 当我说实例时,我指的是已实例化的对象(已在计算机内存中创建的对象)。 因此,无论何时使用XCode创建项目,都始终需要标记“初始视图控制器” (看到右下角说“是最初的View Controller,问问自己……为什么XCode确实需要知道这一点?”) 这将是您创建的第一个实例。 然后用于生成其他实例。 苹果之所以选择这种架构,是出于安全考虑(我认为...?如果他们有更好的答案,请纠正我)。 您可以看到所有视图“实例”的非常清晰的视图。 在XCode中运行程序时单击此按钮 然后,您可以查看视图的层次结构。 我做了一个简单的程序,单击一个按钮将加载另一个视图。 在这里,我没有单击按钮,并且仅加载了一个视图。 在我单击按钮并添加新视图之前 但是在这里我单击了按钮并加载了下一个视图, 在此处输入图片说明 在最上方,他们都说UIWindow 这是因为...(我希望您能猜到这部分!)它们都是从UIWindow视图中实例化的。 不相信我吗? 看一下这个! 这是实际的视图层次结构。 没有按下按钮的那个 按下按钮的那个 因此,在您不明白我的意思的情况下。 您应该理解,仅通过阅读您的问题就可以很容易地看出,您正在尝试从另一个您要消除的模型实例化您的模型控制器。 因此,如果模型控制器已被解雇,应该如何实例化另一个模型控制器? 还请记住,最好仅以其用途命名控制器,例如MenuViewController或MainController或VideoController。 单词模型通常在MVC中使用,不应用作ViewControllers名称的一部分。 (希望我听起来不粗鲁,我以前曾辅导初中,所以这是我教XD的方法)

尝试:

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

            })

您的演示控制器的类型在哪里。 您还必须将navigateToAtmDetail方法移动到另一个控制器

简短的解释(更好的是,下面的答案中有详细的解释)是您不能在已经被解雇的控制器上展示新的控制器。 因此,我们想回到介绍我们的控制器( presentingViewController ),它恰好是一个navigationViewController 这没有我们想要的逻辑,因此我们需要具有它的子viewcontroller( childViewControllers[x] )。 然后,我们命令该控制器执行下一个表示逻辑。 祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM