ios - Swift iOS Stripe - 当过期或 CVV 字段处于活动状态且卡号字段为空时如何关闭键盘
问题描述
我有 1 个接受卡号、到期日期和 cvv 的条纹文本字段。我在视图上还有一个点击手势识别器来关闭键盘。
如果卡号为空或填写不正确(例如 4 位而不是 16 位)并且我按下到期日期或 cvv 字段然后我按下外部文本字段以关闭键盘,而不是如果它立即关闭它会跳转到卡号字段,然后我必须再次在文本字段外按下以关闭键盘。本质上,我必须在键盘外按两次才能将其关闭,这看起来像一个错误。
但是,如果正确填写了卡号,然后我会经历相同的过程,我只需按一次文本字段的外部即可关闭键盘。
似乎有一个默认值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
推荐阅读
- cypress - 当我使用 cy.visit() 时,赛普拉斯将 /__/#/ 添加到链接中,
- c++ - 如何创建一个函数来初始化 C++ 中的结构对象?
- php - 单击添加按钮后,如何将上面的所有值填充到下表中?
- python - 滑动窗口算法 - start < n 的条件
- excel - 如何让 Excel 中 ActiveX InputBox 的输入出现在我的 VBA 代码中?
- python - 使用 Python (WIN32com) 在 Excel 中创建数据透视表切片器
- c# - 无法从空对象调用方法或检索属性。以下调用堆栈返回的对象为空
- airflow - Cloud Composer/Airflow Task Runner Storage
- swift - 如何在 swiftui 中显示来自网络的图像?
- erlang - Erlang - 主管不会重新启动工作进程