iOS手機號輸入框相關需求及實現

一.運用場景

咱們在開發中都會有 手機號註冊、登陸或者地址詳情有收貨人手機號輸入及判斷的問題

二.要求

通常產品會有以下要求
  1. 數字鍵盤
  2. 數據校驗,輸入時或者輸入後必須爲全數字
  3. 鍵盤上有完成按鈕,相似下圖

4.須要全選制手機聯繫人(iOS11有坑)bash

三.解決方案

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;  
  }
}
複製代碼
4.複製手機聯繫人.通常的用戶都會採用從聯繫人複製而後粘貼到輸入框。

用戶得本身刪除之間的空格,在iOS11後,系統在複製時加入了些亂碼類的東西,即便用戶刪除能看到的空格,仍是有問題。ide

字符串長度13.本地手機號校驗確定過不了,服務端校驗也不會過。解決方案爲:將字符串中的數字所有提出來重組ui

[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; 
   }
}複製代碼

或者本地不改,告訴服務端的同窗,讓他們將字符串中的數字所有提出來重組,思想同理 
相關文章
相關標籤/搜索