在 Swift 中显示和关闭模态视图控制器

Posted

技术标签:

【中文标题】在 Swift 中显示和关闭模态视图控制器【英文标题】:Display and dismiss a modal view controller in Swift 【发布时间】:2015-01-25 17:54:39 【问题描述】:

按下按钮时,我想使用模态转换样式CoverVertical 在两个视图控制器之间切换,然后将其关闭。那里有很多关于如何在目标 C 中做到这一点的信息,但在 Swift 中找不到任何好的信息。到目前为止,我已经这样做了,但我认为它不正确:

 @IBAction func insertStatus(sender: UIButton) 

         var StatusVC: StatusViewController = StatusViewController()
    var modalStyle: UIModalTransitionStyle = UIModalTransitionStyle.CoverVertical
    StatusVC.modalTransitionStyle = modalStyle
    self.presentViewController(StatusVC, animated: true, completion: nil)

    

我这样使用的 Dismiss 也不起作用:

@IBAction func statusSaved(sender: UIBarButtonItem) 

        self.dismissViewControllerAnimated(false, completion:  () -> Void in
            let usersVC: UsersViewController = self.storyboard?.instantiateViewControllerWithIdentifier("UsersViewController") as UsersViewController
       )
    

【问题讨论】:

您是否尝试过使用 Storyboard 连接两个 ViewController?? 不,我知道该怎么做,但这不允许你解雇它吗?我想以编程方式进行。 对不起,您能详细解释一下您要做什么吗?谢谢。 我在 VC1 上。当按下按钮时,我想以模态方式呈现 VC2(例如,以模态方式呈现)。然后我想更新 VC2 中的某些内容(例如一些文本),然后在完成后按保存,它将关闭 VC2。希望这会有所帮助... 这是我正在努力实现的目标,但仅限于 VC:***.com/questions/14907518/… 【参考方案1】:

斯威夫特 5:

present(UIViewController(), animated: true, completion: nil)

dismiss(animated: true, completion: nil)

斯威夫特 2.2:

self.presentViewController(true, completion: nil)

隐藏/关闭视图控制器:

self.dismissViewControllerAnimated(true, completion: nil)

【讨论】:

谢谢我现在到了那里,我已经编辑了我的问题,现在屏幕变黑了吗? 将第二行修改为:var StatusVC: UIViewController = StatusViewController()。如果它不起作用,请将其替换为:var StatusVC: StatusViewController = UIViewController() 第一个仍然变黑,第二个要求一个 nibName?我不知道我的是什么? 第一个是正确的。您是否记得在 Storyboard 中将 UIViewController 命名为 StatusVC(通过 Identity Inspector、Class)? 将其命名为 StatusVC 还是 StatusViewController?无论哪种方式,它仍然只是变黑。想不通...【参考方案2】:

在 Swift 3.0 中关闭视图控制器

self.dismiss(animated: true, completion: )

【讨论】:

您使用“隐藏”这个词会有点令人困惑,因为隐藏,感觉就像对象仍然在那里但您没有看到它。事实上,当视图控制器从屏幕上消失后,它的对象就被销毁了,它所使用的内存也被系统回收了。【参考方案3】:

您可以使用来自UIViewControllerpresentViewController:animated:completion:dismissViewControllerAnimated:completion: 方法。请参阅文档here

【讨论】:

【参考方案4】:

在 Swift 4 中关闭视图控制器

dismiss(animated: true, completion: nil)

【讨论】:

【参考方案5】:

很简单:

使用 swift 3.0 关闭模态视图: 像下面这样使用dismiss Api:

> @IBAction func dismissClick(_ sender: Any) 
>         dismiss(animated: true, completion: nil)
>         
>     

目前:

> @IBAction func dismissClick(_ sender: Any) 
> present(UIViewController(), animated: true, completion: nil)
>         
>     

这里有更多详细信息:

https://developer.apple.com/documentation/uikit/uiviewcontroller#//apple_ref/doc/uid/TP40006926-CH3-SW96

【讨论】:

以上是关于在 Swift 中显示和关闭模态视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

Swift:强制在模态中显示导航栏

Swift - 手动转换后关闭最后一个视图控制器

关闭表格视图控制器上方的模态显示视图控制器时,如何从表格视图控制器中取消选择行?

为啥一个简单的模态视图控制器在呈现和关闭时会滞后?

模态视图控制器关闭时应用程序崩溃

关闭模式视图控制器偶尔冻结应用程序,swift 3