Как показать предупреждение после того, как клавиатура была показана в UITextView textViewDidBeginEditing - PullRequest
0 голосов
/ 18 октября 2018

Внутри textViewDidBeginEditing Я показываю предупреждение, используя UIAlertController.Предупреждение отображается перед клавиатурой (на симуляторе).
Как отобразить клавиатуру до появления предупреждения?

 func textViewDidBeginEditing(_ textView: UITextView) {

    if self.balance <= 0 {
        let alert = UIAlertController(title: "Balance Low", message: "Your balance is low.", preferredStyle: UIAlertControllerStyle.alert)

        let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel) { (cancel) in
        }

        let okAction = UIAlertAction(title: "Buy", style: UIAlertActionStyle.default) { (action) in
            self.segueToBuy()
        }

        alert.addAction(cancelAction)
        alert.addAction(okAction)
        self.present(alert, animated: true, completion: nil)

    }

}

1 Ответ

0 голосов
/ 18 октября 2018

Пожалуйста, используйте DispatchQueue.main.asyncAfter, чтобы показывать предупреждение после определенной задержки, всякий раз, когда пользователь вводил текст в UITextView.

func asyncAfter(deadline: DispatchTime, qos: DispatchQoS = default, flags: DispatchWorkItemFlags = default, execute work: @escaping @convention(block) () -> Void)

Частная переменная экземпляра Delcare, которая используется для локального отображения предупреждения.

var showAlert = true

Попробуйте код, показанный ниже в textViewDidBeginEditing:

func textViewDidBeginEditing(_ textView: UITextView) {

    if self.showAlert && self.balance <= 0 {
        DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
            textView.endEditing(true)
            let alert = UIAlertController(title: "Balance Low", message: "Your balance is low.", preferredStyle: UIAlertController.Style.alert)

            let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel) { (cancel) in

                self.showAlert = false
                textView.becomeFirstResponder()
            }

            let okAction = UIAlertAction(title: "Buy", style: UIAlertAction.Style.default) { (action) in

                textView.endEditing(true)
                self.segueToBuy()
            }

            alert.addAction(cancelAction)
            alert.addAction(okAction)
            self.present(alert, animated: true, completion: nil)
        }
    }
}
...