创建一个自定义UIAlertController

时间:2020-07-16 17:44:35

标签: ios swift swiftui uikit uialertviewcontroller

目标:要创建包含UITextField数据条目和两个按钮的警报:“接受”和“取消”。

我知道UIAlertViewController不会被更改。

我试图制作一个UIViewController,但是在VC的视图充满整个包含成员警报/模式视图的屏幕时遇到了麻烦。

最简单的方法只是制作一个UIView并从主机控制它。

我想要的只是将* customizable *对话框/警报显示为* presented * UIViewController。定制警报是指具有接受用户数据的能力。

我也很好奇如何通过SwiftUI做到这一点。

2 个答案:

答案 0 :(得分:1)

如果考虑使用UIKit,则可以像这样在UIAlertController中放置一个文本字段。

let alertController = UIAlertController(title: "Text Entry", message: "", preferredStyle: .alert)

// Add a textField to your controller, with a placeholder value & secure entry enabled
alertController.addTextField { textField in
    textField.placeholder = "Enter Text"
    textField.isSecureTextEntry = true
    textField.textAlignment = .center
}

// A cancel action
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { _ in
    print("Canelled")
}

// This action handles your confirmation action
let confirmAction = UIAlertAction(title: "Accept", style: .default) { _ in
    print("Current password value: \(alertController.textFields?.first?.text ?? "None")")
}

// Add the actions, the order here does not matter
alertController.addAction(cancelAction)
alertController.addAction(confirmAction)

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

enter image description here

让我知道它是否回答了您的问题。

答案 1 :(得分:0)

extension UIViewController {

func showAlertWithCancel(title: String, message: String, okAction: String, cancel: String, completion: ((Bool, String) -> Void)? = nil ) {
    let sb_main = UIStoryboard.init(name: "Main", bundle: nil)
    let vc: CustomNewAlertVC = sb_main.instanceVC()
    vc.modalPresentationStyle = .custom
    vc.modalTransitionStyle = .crossDissolve
    vc._ok = okAction
    vc._msg = message
    vc._title = title
    vc._cancel = cancel
    vc.delegate = { aa in
        completion?(aa)
    }
    DispatchQueue.main.async {
        self.present(vc, animated: true, completion: nil)
    }
 }
}

要显示警报,请使用:self.showAlertWithCancel(title:“ Test” ....

enter image description here