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;

    }

}

或者本地不改,告诉服务端的同学,让他们将字符串中的数字全部提出来重组,思想同理

你可能感兴趣的:(iOS手机号输入框相关问题解决)