Linked Questions

Popular Questions

I have 1 stripe textfield that accepts the card number, expiration date, and cvv. I also have a tap gesture recognizer on the view to dismiss the keyboard.

If the card number is empty or improperly filled out (eg. 4 digits instead of 16) and I press the expiration date or cvv fields and then I press outside textfield to dismiss the keyboard, instead if it immediately dismissing it jumps to the card number field, then I have to press outside the textfield again to dismiss the keyboard. Essentially I have to press outside the keyboard twice to dismiss it which looks like a bug.

However if the card number is properly filled out and then I go through the same process I only have to press the outside the textfield once to dismiss the keyboard.

It seems like there is a default on the STPPaymentCardTextField that says "if the card number is invalid and the user tries to dismiss the keyboard from the expiration date or cvv fields then don't dismiss the keyboard, jump to the card number first and only dismiss it from there"

How can I immediately dismiss the keyboard from the expiration date or cvv fields even if the card number is improperly filled out?

import Stripe

let paymentTextField: STPPaymentCardTextField = {
    let stp = STPPaymentCardTextField()
    stp.translatesAutoresizingMaskIntoConstraints = false
    return stp
}()

override func viewDidLoad() {
    super.viewDidLoad()

    paymentTextField.delegate = self

    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
    view.addGestureRecognizer(tapGesture)
}

@objc fileprivate func dismissKeyboard() {
    view.endEditing(true)
}

Related Questions