gpt4 book ai didi

ios - 文本字段无法输入或不显示键入的数字

转载 作者:行者123 更新时间:2023-11-29 05:41:09 26 4
gpt4 key购买 nike

我有一个名为“安全代码”的文本字段,它使用数字键盘。但当我输入时,什么也没有显示。 (其他文本字段都运行良好)

Cannot Type in "Security Code" Textfield

错误消息:

Can't find keyplane that supports type 4 for keyboard iPhone-PortraitTruffle-NumberPad; using 20615_PortraitTruffle_iPhone-Simple-Pad_Default

我搜索了这个错误信息,得到的答案是使用硬件->键盘->连接硬件键盘来解决。但我认为这是另一个问题,并不能解决我的问题。对于真机和模拟器都存在这个问题。顺便说一句,数字键盘会正常弹出,但是当我点击键盘时,文本字段中没有任何显示。

我尝试将键盘类型从数字键盘更改为默认键盘或其他键盘,但也不起作用。

我认为这可能是因为文本字段没有正确获取我输入的内容。

以下是我的一些代码:(AddCreditCardVC.swift)

    @IBOutlet weak var txtSecurityCode: SkyFloatingLabelTextField! {
didSet{
txtSecurityCode.isMandatory = true
}
}

@objc func commonInit() {
txtSecurityCode.text = "abc"
txtSecurityCode.isEnabled = false
}

@objc func addCreditCard() {
viewModel.securityCode = txtSecurityCode.text

viewModel.addCreditCard(success: {
// post noti
self.postCreditCardUpdatedNoti()
self.dismiss(animated: true)
}) {
self.showAlert($0)
}
}

@objc func initTextFields() {
creditCardMaskDelegate.listener = self
txtSecurityCode.delegate = self
setupSkyTextFields(textField: txtSecurityCode, placholder: "Security Code *", title: "SECURITY CODE *", text: "", isMandatory: true)
[txtCreditCardNo,txtExpiryYear,txtExpiryMonth,txtSecurityCode].forEach {
$0?.errorTextColor = .black
}
}

extension AddCreditCardVC: MaskedTextFieldDelegateListener {
func textField(_ textField: UITextField, didFillMandatoryCharacters complete: Bool, didExtractValue value: String) {
// do nothing
}
}

extension AddCreditCardVC: UITextFieldDelegate {


func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {


if textField == txtCreditCardNo {
let card = STPCardValidator.brand(forNumber: textField.text ?? "")
imgCardType.image = CardType(rawValue: card.rawValue)?.getCardLogo()
cvcCount = CardType(rawValue: card.rawValue)?.getCvcCount() ?? 0
}

print("textField-->", txtSecurityCode)

if textField == txtSecurityCode {
guard let text = textField.text else { return true }
let newLength = text.count + string.count - range.length
return newLength <= cvcCount



}
return true
}

func textFieldDidBeginEditing(_ textField: UITextField) {

if textField == txtExpiryMonth {
isExpireMonth = true
expirePicker.isMonth = true
expirePicker.setExpireMonth()
}else if textField == txtExpiryYear {
isExpireMonth = false
expirePicker.setExpireYear()
}
}
}

对于 print("textField-->", txtSecurityCode),当我在“安全代码”文本字段中点击键盘时,它返回:

Optional(<SkyFloatingLabelTextField.SkyFloatingLabelTextField: 0x7fd3a4173800; baseClass = UITextField; frame = (24 3; 148 41); text = ''; opaque = NO; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x600003bfbed0>; layer = <CALayer: 0x600003463bc0>>)

更新:根据@matt的建议,添加:在第一行返回 true

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

现在可以在文本字段中输入内容。所以问题是这个函数不正确。

最佳答案

解决方案:修改代码:

if textField  == txtSecurityCode {
guard let text = textField.text else { return true }
let newLength = text.count + string.count - range.length

let card = STPCardValidator.brand(forNumber: txtCreditCardNo.text ?? "")
imgCardType.image = CardType(rawValue: card.rawValue)?.getCardLogo()
cvcCount = CardType(rawValue: card.rawValue)?.getCvcCount() ?? 0

return newLength <= cvcCount
}

此功能用于根据卡类型限制文本字段“安全代码”的长度。但以前的代码总是将“cvcCount”值设置为“0”,并且该函数将始终返回“false”。这就是为什么它无法输入任何内容。修改后,“cvcCount”会根据卡类型返回值,当输入号码长度小于或等于“cvcCount”时,整个函数将一直返回“true”

关于ios - 文本字段无法输入或不显示键入的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56536381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com