我正在尝试使用以下代码创建信用卡类型文本,但无法做到这一点,有什么办法吗?
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let formatter = NSNumberFormatter()
formatter.groupingSize = 4
formatter.groupingSeparator = "-"
formatter.usesGroupingSeparator = true
print("txtCardNumber \(txtCardNumber.text)")
}
Run Code Online (Sandbox Code Playgroud)
Tee*_*aul 13
这是快速快速3版本的答案.此逻辑实现了带空格的简单16位信用卡格式.
第1步:为信用卡文本字段创建操作
self.txtFieldCreditCardNumber.addTarget(self, action: #selector(didChangeText(textField:)), for: .editingChanged)
Run Code Online (Sandbox Code Playgroud)
第2步:从将执行格式化的textfield选择器方法中调用方法
@objc func didChangeText(textField:UITextField) {
textField.text = self.modifyCreditCardString(creditCardString: textField.text!)
}
Run Code Online (Sandbox Code Playgroud)
第3步:实现方法"modifyCreditCardString"
func modifyCreditCardString(creditCardString : String) -> String {
let trimmedString = creditCardString.components(separatedBy: .whitespaces).joined()
let arrOfCharacters = Array(trimmedString)
var modifiedCreditCardString = ""
if(arrOfCharacters.count > 0) {
for i in 0...arrOfCharacters.count-1 {
modifiedCreditCardString.append(arrOfCharacters[i])
if((i+1) % 4 == 0 && i+1 != arrOfCharacters.count){
modifiedCreditCardString.append(" ")
}
}
}
return modifiedCreditCardString
}
Run Code Online (Sandbox Code Playgroud)
第4步:实现UITextField的委托
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let newLength = (textField.text ?? "").count + string.count - range.length
if(textField == txtFieldCreditCardNumber) {
return newLength <= 19
}
return true
}
Run Code Online (Sandbox Code Playgroud)
就这些.谢谢
| 归档时间: |
|
| 查看次数: |
4518 次 |
| 最近记录: |