簡體   English   中英

Swift iOS Stripe-如何在到期或CVV字段為活動且卡號字段為空時關閉鍵盤

[英]Swift iOS Stripe -How to dismiss keyboard when Expiration or CVV fields are Active and card number field is empty

我有1個帶區的文本字段,可以接受卡號,到期日期和cvv。 我還在視圖上有一個輕擊手勢識別器,可以關閉鍵盤。

如果卡號為空或填寫不正確(例如,用4位數字代替16位數字),並且我按了到期日期或cvv字段,然后按了外部文本字段以關閉鍵盤,相反,如果立即將其刪除,則跳到卡號字段,那么我必須再次在文本字段外按以關閉鍵盤。 從本質上講,我必須按兩次鍵盤外鍵才能將其關閉,這看起來像個錯誤。

但是,如果正確填寫了卡號,然后執行相同的過程,則只需要在文本字段外部按一次即可關閉鍵盤。

似乎在STPPaymentCardTextField上有一個默認值, STPPaymentCardTextField寫着“如果卡號無效,並且用戶試圖從到期日期或cvv字段中取消鍵盤,則不要關閉鍵盤,首先跳至卡號,從那里解散”

即使卡號填寫不正確,如何立即從到期日期或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)
}

我不知道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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM