Swift iOS Stripe -Как отклонить клавиатуру, когда поля Expiration или CVV активны, а поле номера карты пусто - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть 1 текстовое поле в полоску, которое принимает номер карты, срок годности и cvv.У меня также есть распознаватель жестов касания на экране, чтобы закрыть клавиатуру.

Если номер карты пуст или неправильно заполнен (например, 4 цифры вместо 16), и я нажимаю поля даты истечения срока действия или поля cvv изатем я нажимаю за пределами текстового поля, чтобы закрыть клавиатуру, вместо этого, если она сразу же отклоняет ее, она переходит в поле номера карты, а затем мне приходится снова нажимать за пределами текстового поля, чтобы закрыть клавиатуру.По сути, мне нужно дважды нажать за пределами клавиатуры, чтобы закрыть ее, что выглядит как ошибка.

Однако, если номер карты заполнен правильно, а затем я выполняю тот же процесс, мне нужно только нажать за пределами текстового поля.один раз, чтобы отклонить клавиатуру.

Похоже, что на STPPaymentCardTextField есть значение по умолчанию, которое говорит: «если номер карты недействителен, и пользователь пытается отклонить клавиатуру из полей срока годности или cvv, тогда donне отклонять клавиатуру, сначала перейти к номеру карты и только отклонить его оттуда "

Как я могу немедленно удалить клавиатуру из полей даты истечения срока годности или cvv, даже если номер карты заполнен неправильно?

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)
}

1 Ответ

0 голосов
/ 03 февраля 2019

Я не знаю, как работает Stripe, но попробуйте это:

override func viewDidLoad() {
    super.viewDidLoad()

    paymentTextField.delegate = self

    setGestureRecognizerDelegate()
}

private func setGestureRecognizerDelegate() {
    let tapOnEmptyPlaceGestureRecognizer = UITapGestureRecognizer(
        target: self,
        action: #selector(tapOnEmptyPlaceGestureCaptured(gesture:)))
    tapOnEmptyPlaceGestureRecognizer.delegate = self
    view.addGestureRecognizer(tapOnEmptyPlaceGestureRecognizer)
}

@objc private func tapOnEmptyPlaceGestureCaptured(gesture: UITapGestureRecognizer) {
    let touchPoint = gesture.location(in: view)

    // Make next code for all your textFields
    if !paymentTextField.point(inside: touchPoint, with: nil) {
        paymentTextField.resignFirstResponder()
    }
}

Также не забудьте сделать ваш UIViewController UIGestureRecognizerDelegate

...