美文网首页
Swift - 告警提示框(UIAlertController)

Swift - 告警提示框(UIAlertController)

作者: 西蜀 | 来源:发表于2018-04-24 13:54 被阅读345次

自 iOS8 起,苹果就建议告警框使用 UIAlertController 来代替 UIAlertView 和 UIActionSheel。

1,简单的应用(同时按钮响应Handler使用闭包函数)

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

    }

    override func viewDidAppear(_ animated: Bool){

        super.viewDidAppear(animated)

        let alertController = UIAlertController(title: "系统提示",

                        message: "您确定要开始学习吗?", preferredStyle: .alert)

        let cancelAction = UIAlertAction(title: "取消", style: .cancel, handler: nil)

        let okAction = UIAlertAction(title: "好的", style: .default, handler: {

            action in

            print("点击了确定")

        })

        alertController.addAction(cancelAction)

        alertController.addAction(okAction)

        self.present(alertController, animated: true, completion: nil)

    }

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

    }

}

2,除了弹出,还可以使用从底部向上滑出的样式

(注意:如果上拉菜单中有“取消”按钮的话,那么它永远都会出现在菜单的底部,不管添加的次序是如何)

let alertController = UIAlertController(title: "保存或删除数据", message: "删除数据将不可恢复",

                                        preferredStyle: .actionSheet)

let cancelAction = UIAlertAction(title: "取消", style: .cancel, handler: nil)

let deleteAction = UIAlertAction(title: "删除", style: .destructive, handler: nil)

let archiveAction = UIAlertAction(title: "保存", style: .default, handler: nil)

alertController.addAction(cancelAction)

alertController.addAction(deleteAction)

alertController.addAction(archiveAction)

self.present(alertController, animated: true, completion: nil)

3,按钮使用“告警”样式(文字颜色变红,用来来警示用户)

let okAction = UIAlertAction(title: "好的", style: .destructive, handler: nil)

4,添加任意数量文本输入框(比如可以用来实现个登陆框)

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

    }

    override func viewDidAppear(_ animated: Bool){

        super.viewDidAppear(animated)

        let alertController = UIAlertController(title: "系统登录",

                            message: "请输入用户名和密码", preferredStyle: .alert)

        alertController.addTextField {

            (textField: UITextField!) -> Void in

            textField.placeholder = "用户名"

        }

        alertController.addTextField {

            (textField: UITextField!) -> Void in

            textField.placeholder = "密码"

            textField.isSecureTextEntry = true

        }

        let cancelAction = UIAlertAction(title: "取消", style: .cancel, handler: nil)

        let okAction = UIAlertAction(title: "好的", style: .default, handler: {

            action in

            //也可以用下标的形式获取textField let login = alertController.textFields![0]

            let login = alertController.textFields!.first!

            let password = alertController.textFields!.last!

            print("用户名:\(login.text) 密码:\(password.text)")

        })

        alertController.addAction(cancelAction)

        alertController.addAction(okAction)

        self.present(alertController, animated: true, completion: nil)

    }

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

    }

}

5,使用代码移除提示框

self.presentedViewController?.dismiss(animated: false, completion: nil)

6,提示框弹出后,过段时间自动移除

下面样例弹出一个不带按钮的消息提示框,过个两秒钟提示框自动消失。

let alertController = UIAlertController(title: "保存成功!",

                                        message: nil, preferredStyle: .alert)

//显示提示框

self.present(alertController, animated: true, completion: nil)

//两秒钟后自动消失

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2) {

    self.presentedViewController?.dismiss(animated: false, completion: nil)

}

附:扩展 UIAlertController 方便使用

从上面的样例可以发现,每次要弹出提示框都要创建一个 UIAlertController,然后添加 action 按钮,最后再通过对应的视图控制器 present 出来。我们可以对 UIAlertController 进行个扩展,把这些操作做个封装,方便使用。

1,UIAlertController扩展(UIAlertExtension.swift)

这里增加两种提示框效果:普通消息提示框、确认提示框。并且每个提示框都可以指定显示的 VC(不指定的话则为根 VC)

import UIKit

extension UIAlertController {

    //在指定视图控制器上弹出普通消息提示框

    static func showAlert(message: String, in viewController: UIViewController) {

        let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)

        alert.addAction(UIAlertAction(title: "确定", style: .cancel))

        viewController.present(alert, animated: true)

    }

    //在根视图控制器上弹出普通消息提示框

    static func showAlert(message: String) {

        if let vc = UIApplication.shared.keyWindow?.rootViewController {

            showAlert(message: message, in: vc)

        }

    }

    //在指定视图控制器上弹出确认框

    static func showConfirm(message: String, in viewController: UIViewController,

                            confirm: ((UIAlertAction)->Void)?) {

        let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)

        alert.addAction(UIAlertAction(title: "取消", style: .cancel))

        alert.addAction(UIAlertAction(title: "确定", style: .default, handler: confirm))

        viewController.present(alert, animated: true)

    }

    //在根视图控制器上弹出确认框

    static func showConfirm(message: String, confirm: ((UIAlertAction)->Void)?) {

        if let vc = UIApplication.shared.keyWindow?.rootViewController {

            showConfirm(message: message, in: vc, confirm: confirm)

        }

    }

}

2,使用样例

下面分别调用两种提示框:

//弹出普通消息提示框

UIAlertController.showAlert(message: "保存成功!")

//弹出确认选择提示框

UIAlertController.showConfirm(message: "是否提交?") { (_) in

    print("点击了确认按钮!")

}

Swift - 告警提示框(UIAlertController)的用法

相关文章

网友评论

      本文标题:Swift - 告警提示框(UIAlertController)

      本文链接:https://www.haomeiwen.com/subject/nbcjlftx.html