輸入身份證號要自定義鍵盤?太low了吧!
小朋友你是不是傻(•̅ ȷ̫ •̅)
良辰我奉勸你不要醬做(除非UI 要求)
構建思路
- 選擇合適的鍵盤
- 輸入時進行調整
- 結束編輯再次調整
核心規避風險
具體做法
貼代碼演示
class:superclass<UIUITextFieldDelegate>
self.IDCardNoField.text = [[UITextField alloc]init];
self.IDCardNoField.delegate = self;
- 鍵盤設置建議使用的鍵盤
UIKeyboardTypeDecimalPad
self.IDCardNoField.placeholder = @"最後一位有X用 . 代替";
self.IDCardNoField.keyboardType = UIKeyboardTypeDecimalPad;
代理中應做的:
- 輸入時
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSLog(@"%@",string);
if ([string isEqualToString:@" "]) {
return NO;
}
if(self.IDCardNoField == textField){
if ([string isEqualToString:@"."]&&newLength == 18) {
textField.text = [NSString stringWithFormat:@"%@X",textField.text];
return NO;
}if ([string isEqualToString:@"."]) {
return NO;
}
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789X."] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
return [string isEqualToString:filtered]&&newLength <= 18? YES :NO ;
}
return newLength <= 16;
}
- 結束編輯再次調整
- (void)textFieldDidEndEditing:(UITextField *)textField;{
if (self.IDCardNoField== textField) {
NSCharacterSet *setToRemove = [[ NSCharacterSet characterSetWithCharactersInString:@"0123456789X."]
invertedSet ];
textField.text = [[textField.text componentsSeparatedByCharactersInSet:setToRemove] componentsJoinedByString:@""];
}
}
當然,如果你需要在使用或者提交表單時判斷身份證是否合法可以看[下一篇]
[上一篇]:iOS UI狀態保存和恢復
[下一篇]:iOS 校驗身份證號碼是否正確