在iOS Swift中使用材质设计对话框时,关闭视图控制器不执行

时间:2019-01-05 18:12:33

标签: ios swift dialog material-design dismissviewcontroller

我正在为Swift编写的iOS应用程序使用“材料设计”对话框。以下是材料设计对话框的简要文档:https://material.io/develop/ios/components/dialogs/

我有一个对话框,该对话框具有1个动作,并且在该动作的完成块中,我想关闭视图控制器并返回到先前的视图控制器。问题是关闭视图控制器不起作用。除了关闭视图控制器外,所有写在完成模块中的指令(例如打印内容)都将执行。

这是我的代码:

DispatchQueue.main.async {
        let alertStr = "Alert"
        let alertController = MDCAlertController(title: "Error", message: alertStr)
        let action = MDCAlertAction(title:"GoBack") { (action) in
            self.dismiss(animated: false, completion: nil)
        }
        alertController.addAction(action)
        self.present(alertController, animated:true, completion:nil)
    }

如果您能帮助我解决问题,我将不胜感激。 预先感谢!

2 个答案:

答案 0 :(得分:0)

一些想法:

  1. dismiss(animated:completion:)“关闭由视图控制器模态显示的视图控制器。”这并不是要关闭由self引用的视图控制器。

    诚然,dismiss将:“如果在呈现的视图控制器本身上调用此方法,则UIKit会要求呈现的视图控制器来处理这种解雇。”但是,您不能依靠{{1 }},因为您不知道何时解雇UIAlertAction以及何时执行按钮的动作。

  2. 您确定显示了视图控制器吗?例如,不是按下了导航控制器吗?

  3. 返回到先前视图控制器的一种好方法是unwind segue(或参见TN2298)。这样就消除了关于“推送” v“呈现”以及MDCAlertController是否将解散呈现的视图控制器并将消息传递给呈现的视图控制器的所有歧义。

答案 1 :(得分:-1)

您尝试过

  performSegue(withIdentifier: "ViewControllerSegue", sender: nil)

您需要在黄色正方形的顶部栏中选择您的viewController(名称是您预先定义的名称) 右键单击并拖动到下一个视图控制器--->模态显示 然后选择箭头,然后转到属性检查器并命名标识符。