模态弹出快速4

时间:2018-01-10 22:14:56

标签: ios swift dialog modal-dialog

我最近一直在网上搜索iOS编程模式对话框的实现。

我知道UIAlertViewController。实际上,我目前正在应用程序中使用此实现。但是,我需要一些模态的东西。我需要代码停止执行,直到用户点击警报中的按钮。

到目前为止,我还没有看到任何我满意的实现。这是我的代码的当前状态:

func messageBox(messageTitle: String, messageAlert: String, messageBoxStyle: UIAlertControllerStyle, alertActionStyle: UIAlertActionStyle)
    {
        var okClicked = false
        let alert = UIAlertController(title: messageTitle, message: messageAlert, preferredStyle: messageBoxStyle)

        let okAction = UIAlertAction(title: "Ok", style: alertActionStyle)
        {
            (alert: UIAlertAction!) -> Void in
            okClicked = true
        }


    /*    alert.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: "Default action"), style: alertActionStyle, handler: { _ in
            okClicked = true
            NSLog("The \"OK\" alert occured.")
        }))*/

        alert.addAction(okAction)

        self.present(alert, animated: true, completion: nil)
        while(!okClicked)
        {

        }
    }

我应该考虑在故事板中创建我自己的对话框硬核风格,还是快速进行某种我可以使用的实现?

2 个答案:

答案 0 :(得分:3)

如果你想要自己的辅助函数,但只想在单击okay按钮后执行代码,你应该看看为辅助函数添加一个完成处理程序。这是一个例子:

func messageBox(messageTitle: String, messageAlert: String, messageBoxStyle: UIAlertControllerStyle, alertActionStyle: UIAlertActionStyle, completionHandler: @escaping () -> Void)
    {
        let alert = UIAlertController(title: messageTitle, message: messageAlert, preferredStyle: messageBoxStyle)

        let okAction = UIAlertAction(title: "Ok", style: alertActionStyle) { _ in
            completionHandler() // This will only get called after okay is tapped in the alert
        }

        alert.addAction(okAction)

        present(alert, animated: true, completion: nil)
    }

我从你的函数中删除了不需要的代码,并添加了一个完成处理程序作为最后一个参数。这个完成处理程序基本上是一个函数,你可以随时调用它,在这种情况下,我们在点击okay按钮时调用它。以下是您使用该功能的方法:

viewController.messageBox(messageTitle: "Hello", messageAlert: "World", messageBoxStyle: .alert) {
    print("This is printed into the console when the okay button is tapped")
}

() -> Void表示“不带参数的函数,不返回任何值”,@escaping表示该函数将在以后异步调用,在这种情况下我们称之为来自警报操作的处理程序,用于点击按钮。

答案 1 :(得分:0)

// declare an alert 
let alert = UIAlertController(title: <#Your Title#>, message:  <#Your Message#> preferredStyle: UIAlertControllerStyle.actionSheet)
//create action and add them to alert
let actionX = UIAlertAction(title:  <#Your Title#>, style: UIAlertActionStyle.default, handler: {(action) in
     // do whatever you want  
}))
alert.addAction(actionX)

您应该查看闭包以了解如何在swift中轻松编码