iOS手機號輸入框相關問題解決

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;

? ? }

}

或者本地不改,告訴服務端的同學,讓他們將字符串中的數字全部提出來重組,思想同理

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。