iOS手機號輸入框相關問題解決
1.運用場景
手機號注冊登錄、地址中收貨人手機號
2.要求
數字鍵盤、數據校驗、鍵盤上有完成按鈕、復制手機聯系人
3.解決方案
1>數字鍵盤
self.middleTextField.keyboardType = UIKeyboardTypeNumberPad;
2>數據校驗
? - (BOOL)checkTelNumber:(NSString *)num {
? ? if (num.length <= 0) {
? ? ? ? return NO;
? ? }
? ? NSString *regexStr = @"^((1[0-9]))\\d{9}$";
? ? NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regexStr];
? ? BOOL isMatch = [pred evaluateWithObject:num];
? ? return isMatch;
}
3>鍵盤上有完成按鈕。自定義UITextField。
- (void)drawRect:(CGRect)rect {
? ? [super drawRect:rect];
? ? UIToolbar * toobar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 38.0f)];
? ? toobar.translucent = YES;
? ? toobar.barStyle = UIBarStyleDefault;
? ? UIBarButtonItem * spaceBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
? ? UIBarButtonItem * doneBarButtonItem = [[UIBarButtonItem alloc] init];
? ? UIButton? * saveBtn? = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 60, 38)];;
? ? [saveBtn? setTitle:@"完成" forState:UIControlStateNormal];
? ? [saveBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
? ? [saveBtn addTarget:self action:@selector(resignKeyboard) forControlEvents:UIControlEventTouchUpInside];
? ? doneBarButtonItem.customView =? saveBtn;
? ? [toobar setItems:@[spaceBarButtonItem,doneBarButtonItem]];
? ? if (self.keyboardType == UIKeyboardTypeNumberPad) {
? ? ? ? self.inputAccessoryView = toobar;
? ? }else{
? ? ? ? self.inputAccessoryView = nil;
? ? }
}
- (void)resignKeyboard
{
? ? if ([self isFirstResponder]) {
? ? ? ? [self resignFirstResponder];
? ? }
}
4>復制手機聯系人.一般的用戶都會采用從聯系人復制然后粘貼到輸入框。用戶得自己刪除之間的空格,在iOS11后,系統在復制時加入了些亂碼類的東西,即使用戶刪除能看到的空格,還是有問題。字符串長度13.本地手機號校驗肯定過不了,服務端校驗也不會過。解決方案為:將字符串中的數字全部提出來重組
[self.middleTextField addTarget:self action:@selector(middleTextFieldTextChange:) forControlEvents:UIControlEventEditingChanged];
- (void)middleTextFieldTextChange:(UITextField *)textField{
? ? NSString *pureNumbers = [[textField.text componentsSeparatedByCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet]] componentsJoinedByString:@""];
? ? if (pureNumbers && [pureNumbers length] >= 11) {
? ? ? ? textField.text = pureNumbers;
? ? }
}
或者本地不改,告訴服務端的同學,讓他們將字符串中的數字全部提出來重組,思想同理