Доступ к тексту в UIAlertTextField с помощью класса Alert в модели - PullRequest
1 голос
/ 21 октября 2019

Я создал класс Alert на своем уровне модели для представления простых оповещений, и это прекрасно работает.

class Alert {
    class func showBasic(title: String, message: String, vc: UIViewController) {
        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
        vc.present(alert, animated: true)
    }
}

Я пытаюсь добавить второй тип оповещения с текстовым полем и имеюрезультат textField доступен в контроллере представления. Я пытался с обработчиком завершения, но обработчик завершения срабатывает, когда предупреждение заканчивается, а не когда текст вводится. Как я могу захватить текст в текстовом поле и использовать его в контроллере представления?

class func withInput(title: String, message: String, vc: UIViewController, placeholder: String, btnTitle: String, complete: (_ result:String) -> Void) {
    let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
    alert.addTextField { (textField) in
        textField.placeholder = placeholder
    }
    alert.addAction(UIAlertAction(title: btnTitle, style: .default, handler: nil))
    vc.present(alert, animated: true)
    if let text = alert.textFields?[0].text {
        complete(text)
    }
}

1 Ответ

0 голосов
/ 21 октября 2019

Обработчик завершения должен войти в обработчик завершения addAction

class func withInput(title: String, message: String, vc: UIViewController, placeholder: String, btnTitle: String, complete: @escaping (_ result:String) -> Void) {
    let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
    alert.addTextField { (textField) in
        textField.placeholder = placeholder
    }
    alert.addAction(UIAlertAction(title: btnTitle, style: .default, handler: { [weak alert] (_) in
        if let text = alert?.textFields?[0].text {
            complete(text)
        }
    }))
    vc.present(alert, animated: true)
}
...