iOS自定义身份证键盘是一种应用场景非常广泛的自定义键盘,在中国的银行、保险、政府等机构中都有应用。在这里,我将为大家介绍如何实现一个完整的iOS自定义身份证键盘。
第一步:创建一个新的自定义键盘
首先,我们需要在Xcode中创建一个新的CustomKeyboard
项目。选择 File -> New -> Target -> Application Extension -> Custom Keyboard
,然后在弹出的对话框中为应用程序输入名称。在创建好新项目的同时,它也会为您生成适当的代码。
第二步:创建身份证键盘的UI
接下来,我们需要为我们的自定义键盘添加身份证的UI,这里我们使用简单的UI框架布局来设置身份证键盘。
override func viewDidLoad() {
super.viewDidLoad()
let keyboardView = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 220))
keyboardView.backgroundColor = UIColor.white
let backBtn = UIButton(frame: CGRect(x: 0, y: 0, width: 75, height: 55))
backBtn.setTitle("删除", for: .normal)
backBtn.addTarget(self, action: #selector(deleteBtnPressed), for: .touchUpInside)
backBtn.titleLabel?.font = UIFont.systemFont(ofSize: 23.0)
backBtn.setTitleColor(.black, for: .normal)
keyboardView.addSubview(backBtn)
let titleLabel = UILabel(frame: CGRect(x: 85, y: 0, width: 150, height: 55))
titleLabel.text = "身份证号码"
titleLabel.font = UIFont.systemFont(ofSize: 16.0)
titleLabel.textColor = .darkGray
titleLabel.textAlignment = .center
keyboardView.addSubview(titleLabel)
let doneBtn = UIButton(frame: CGRect(x: 235, y: 0, width: 85, height: 55))
doneBtn.setTitle("完成", for: .normal)
doneBtn.addTarget(self, action: #selector(doneBtnPressed), for: .touchUpInside)
doneBtn.titleLabel?.font = UIFont.systemFont(ofSize: 23.0)
doneBtn.setTitleColor(.black, for: .normal)
keyboardView.addSubview(doneBtn)
let horizontalStackView = UIStackView(frame: CGRect(x: 0, y: 55, width: keyboardView.frame.width, height: 70))
horizontalStackView.axis = .horizontal
horizontalStackView.distribution = .fillEqually
keyboardView.addSubview(horizontalStackView)
for i in 0...9 {
let btn = UIButton(type: .system)
btn.setTitle("\(i)", for: .normal)
btn.titleLabel?.font = UIFont.systemFont(ofSize: 23.0)
btn.setTitleColor(.black, for: .normal)
btn.addTarget(self, action: #selector(numberBtnPressed), for: .touchUpInside)
horizontalStackView.addArrangedSubview(btn)
}
let horizontalStackView2 = UIStackView(frame: CGRect(x: 0, y: 125, width: keyboardView.frame.width, height: 70))
horizontalStackView2.axis = .horizontal
horizontalStackView2.distribution = .fillEqually
keyboardView.addSubview(horizontalStackView2)
let clearBtn = UIButton(type: .system)
clearBtn.setTitle("清空", for: .normal)
clearBtn.titleLabel?.font = UIFont.systemFont(ofSize: 23.0)
clearBtn.setTitleColor(.black, for: .normal)
clearBtn.addTarget(self, action: #selector(clearBtnPressed), for: .touchUpInside)
horizontalStackView2.addArrangedSubview(clearBtn)
let leftBracketBtn = UIButton(type: .system)
leftBracketBtn.setTitle("(", for: .normal)
leftBracketBtn.titleLabel?.font = UIFont.systemFont(ofSize: 23.0)
leftBracketBtn.setTitleColor(.black, for: .normal)
leftBracketBtn.addTarget(self, action: #selector(leftBracketBtnPressed), for: .touchUpInside)
horizontalStackView2.addArrangedSubview(leftBracketBtn)
let rightBracketBtn = UIButton(type: .system)
rightBracketBtn.setTitle(")", for: .normal)
rightBracketBtn.titleLabel?.font = UIFont.systemFont(ofSize: 23.0)
rightBracketBtn.setTitleColor(.black, for: .normal)
rightBracketBtn.addTarget(self, action: #selector(rightBracketBtnPressed), for: .touchUpInside)
horizontalStackView2.addArrangedSubview(rightBracketBtn)
self.view.addSubview(keyboardView)
}
在这里,我们创建了一个类似于标准数字键盘的UI,但添加了清空和圆括号按钮等额外的按钮,以便用户更方便地输入身份证。
第三步:添加身份证号码的验证逻辑
接下来,我们需要为我们的自定义键盘添加身份证验证逻辑。我们可以使用正则表达式来验证身份证输入是否正确。以下是一个用于检查中国大陆身份证的正则表达式:
let identityRegEx = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}(0[1-9]|[1-9][012])\\d{2}\\d{3}[0-9xX]$"
当用户在身份证键盘上按下数字时,我们将存储在键盘输入区域中的文本与该正则表达式进行比较,以查看输入是否为身份证号码。如果输入无效,则会显示一个警告,直到用户修复为止。
以下是在身份证键盘ViewController中添加身份证验证逻辑的代码片段:
// 定义一个储存键盘输入的字符串变量
var inputText = ""
@objc func numberBtnPressed(_ sender: UIButton) {
guard let enteredText = sender.currentTitle else {
return
}
// 如果输入达到18位自动返回
guard inputText.count < 18 else {
return
}
// 将文本附加到键盘输入字符串变量上
inputText += enteredText
// 计算剩余输入文本的长度
let remainingLength = 18 - inputText.count
if remainingLength == 0 {
// 验证身份证是否有效
if isValidIdentityNumber(identityNumber: inputText) {
// 关闭键盘并将输入传回主应用程序
self.dismissKeyboard()
self.textDocumentProxy.insertText(inputText)
} else {
// 显示不正确警告
let alertController = UIAlertController(title: "身份证格式不正确", message: "请检查您输入的身份证号码并重试", preferredStyle: .alert)
let okAction = UIAlertAction(title: "确定", style: .default, handler: nil)
alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)
// 清空输入文本
inputText = ""
}
}
}
func isValidIdentityNumber(identityNumber: String) -> Bool {
let identityRegEx = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}(0[1-9]|[1-9][012])\\d{2}\\d{3}[0-9xX]$"
let identityTest = NSPredicate(format: "SELF MATCHES %@", identityRegEx)
return identityTest.evaluate(with: identityNumber)
}
示例一:身份证号码输入
以下是使用自定义身份证键盘输入身份证号码的示例:
-
在iOS中的任何文本输入字段上,点击键盘中的全球图标以切换到自定义身份证键盘。
-
点击身份证键盘上的数字按钮以输入身份证号码。
-
键入完整的18位身份证号码后,键盘将关闭并输入身份证号码。
示例二:中途取消身份证号码输入
以下是使用自定义身份证键盘取消身份证号码输入的示例:
-
在iOS中的任何文本输入字段上,点击键盘中的全球图标以切换到自定义身份证键盘。
-
点击身份证键盘上的数字按钮以输入身份证号码。
-
在键入全部数字之前或在键入字母、符号或其他内容时,点击清空按钮以清除输入。
-
点击删除按钮以删除最后输入的数字。
-
由于输入不是18位身份证号码,键盘将显示一个错误警告。
-
修复错误后重试输入身份证号码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:iOS自定义身份证键盘 - Python技术站