美文网首页UITextField
iOS 格式化电话号码 (3 4 4 位空格分割)

iOS 格式化电话号码 (3 4 4 位空格分割)

作者: 失忆的程序员 | 来源:发表于2023-04-10 14:43 被阅读0次
二哈吃树叶.gif
@property (nonatomic, strong) ATextFieldPlaceholder *textField; ///< 输入
@property (nonatomic, strong) NSString *phoneContent;

// 输入框
- (ATextFieldPlaceholder *)textField
{
    if (!_textField) {
        _textField = [[ATextFieldPlaceholder alloc] init];
        _textField.placeholder = @"188 8888 8888";
        _textField.placeholderColor = color_F2F2F2;
        _textField.placeholderFont = AFONTMedium(24);
        _textField.tf_delegate = self;
        _textField.font = AFONTMedium(24);
        _textField.textColor = color_333333;
        _textField.returnKeyType = UIReturnKeyDone;
        _textField.keyboardType = UIKeyboardTypeNumberPad;
        _textField.backgroundColor = [UIColor clearColor];
        _textField.delegate = self;
        _textField.textAlignment = NSTextAlignmentLeft;
        [_textField addTarget:self action:@selector(onAcionCodeFieldChanged:) forControlEvents:UIControlEventEditingChanged];
        [_textField addDoneOnKeyboardWithTarget:self action:@selector(ActionSearchDid)];
    }
    return _textField;
}



- (void)onAcionCodeFieldChanged:(UITextField *)textField
{
    NSString *currentText = textField.text;
    // 是否正在执行删除操作
    BOOL editFlag = NO;
    if (currentText.length < self.phoneContent.length) {
        editFlag = YES;
    }
    // 光标位置
    NSInteger targetPosition = [textField offsetFromPosition:textField.beginningOfDocument toPosition:textField.selectedTextRange.start];
    textField.text = [currentText isPhone];
    NSInteger currentPosition = targetPosition;
    // 删除
    if (editFlag)
    {
        if (currentPosition == 4 || currentPosition == 9)
        {
            currentPosition -= 1;
        }
    }
    else
    {
        if (currentPosition == 4 || currentPosition == 9)
        {
            currentPosition += 1;
        }
    }
    UITextPosition *nowPosition = [textField positionFromPosition:textField.beginningOfDocument offset:currentPosition];
    textField.selectedTextRange = [textField textRangeFromPosition:nowPosition toPosition:nowPosition];
    
    if (textField.text.length == 11+2)
    //if ([AStrUtils iPhoneRegular11phone:textField.text])
    {
        [self endEditing:YES];
    }
    if (self.delegate && [self.delegate respondsToSelector:@selector(onServePhoneReplenishingCell:inputText:)]) {
        [self.delegate onServePhoneReplenishingCell:self inputText:textField.text];
    }
}
// MARK: ----- UITextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (self.textField == textField) {
        self.phoneContent = textField.text;
        if (self.phoneContent.length >= 13 && string.length > 0) {
            NSLog(@"手机号码为11位");
            return NO;
        }
        //self.previousSelection = textField.selectedTextRange;
    }
    return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    [self ActionSearchDid];
    return YES;
}

// MARK: ----- 点击事件

- (void)ActionBenBenClick
{
    if (self.delegate && [self.delegate respondsToSelector:@selector(onServePhoneReplenishingCell:didbenben:)]) {
        [self.delegate onServePhoneReplenishingCell:self didbenben:YES];
    }
}

- (void)ActionSearchDid
{
    [self endEditing:YES];
    if (self.textField.text.length == 11+2)
    //if ([AStrUtils iPhoneRegular11phone:self.textField.text])
    {
        if (self.delegate && [self.delegate respondsToSelector:@selector(onServePhoneReplenishingCell:inputText:)]) {
            [self.delegate onServePhoneReplenishingCell:self inputText:self.textField.text];
        }
    }
    else
    {
        [ViewTool tipWithContent:@"请输入11位手机号"];
    }
}

扩展

- (NSString *)isPhone {
    NSString * str = [self stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSMutableString * phone = [NSMutableString stringWithString:str];
    if (phone.length <= 3) {
        
    } else if (phone.length <= 7) {
        [phone insertString:@" " atIndex:3];
    } else if (phone.length <= 11) {
        [phone insertString:@" " atIndex:7];
        [phone insertString:@" " atIndex:3];
    }
    return phone;
}

参考区域

参考1

相关文章

网友评论

    本文标题:iOS 格式化电话号码 (3 4 4 位空格分割)

    本文链接:https://www.haomeiwen.com/subject/pefwddtx.html