iOS UITextField輸入身份證號設置

簡書

輸入身份證號要自定義鍵盤?太low了吧!

小朋友你是不是傻(•̅ ȷ̫ •̅)

良辰我奉勸你不要醬做(除非UI 要求)

構建思路

  1. 選擇合適的鍵盤
  2. 輸入時進行調整
  3. 結束編輯再次調整

核心規避風險

具體做法

貼代碼演示
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 校驗身份證號碼是否正確






我的專題:

iOS開發

Mac漢化(遊戲/軟件)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章