Вы можете добавить в свой метод еще один параметр для передачи контроллера предупреждений:
func alertVerify(title: String, message: String, sender: UIViewController, alert: UIAlertController, verify: ((UIAlertAction) -> Void)? = nil, resend: ((UIAlertAction) -> Void)? = nil) {
alert.title = title
alert.message = message
alert.addTextField {
$0.placeholder = "Verification code"
}
alert.addAction(.init(title: "Verify", style: .default, handler: verify))
alert.addAction(.init(title: "Resend", style: .default, handler: resend))
alert.addAction(.init(title: "Cancel", style: .cancel))
DispatchQueue.main.async {
sender.present(alert, animated: true)
}
}
Затем, когда вы вызываете свой метод, вы передаете ему экземпляр своего контроллера предупреждений:
func verifyEmail() {
let alert = UIAlertController(title: nil, message: nil, preferredStyle: .alert)
alertVerify(title: "Email Verification Code",
message: "Enter the verification code we send in your updated email adress.",
sender: self,
alert: alert,
verify: { _ in
let inputCode = alert.textFields![0].text!
print("Verification code: \(inputCode)")
}, resend: nil)
}
Другой вариант - создать подкласс UIAlertController и добавить к нему свой собственный метод:
AlertController.swift
import UIKit
class AlertController: UIAlertController {
var controller: UIViewController!
convenience init(title: String?, message: String?, sender: UIViewController) {
self.init(title: title, message: message, preferredStyle: .alert)
controller = sender
}
func verify(_ action: ((UIAlertAction) -> Void)? = nil, resend: ((UIAlertAction) -> Void)? = nil) {
if actions.isEmpty {
addTextField {
$0.placeholder = "Verification code"
}
addAction(.init(title: "Verify", style: .default, handler: action))
addAction(.init(title: "Resend", style: .default, handler: resend))
addAction(.init(title: "Cancel", style: .cancel))
}
DispatchQueue.main.async {
self.controller.present(self, animated: true)
}
}
}
Затем вы создаете экземпляр своего настраиваемого контроллера оповещений и вызываете свой метод от него:
func verifyEmail() {
let alert = AlertController(title: "Email Verification Code", message: "Enter the verification code we send in your updated email adress.", sender: self)
alert.verify({ _ in
let inputCode = alert.textFields![0].text!
print("Verification code: \(inputCode)")
}, resend: nil)
}