如何在文本字段中以123-456-7890格式显示手机号码

时间:2011-03-02 04:46:35

标签: iphone

我需要在文本字段中输入手机号码。

我需要显示手机号码,如123-456-7890格式。

例如:1234567890是我的手机号码,我在文本字段中输入此手机号码,

对于我需要放置的前三位数 - 再经过3位数后我需要放置 - 。

如果我输入123然后自动放置 - 在文本字段中,在456之后,不需要再放置4位数。

类似于以货币格式显示文字。

但是从该文本字段获取文本时我需要获取手机号码 - 如1234567890,而不是123-456-7890。

我认为现在我的问题很清楚,如果不是,请加上评论。

提前感谢你。

4 个答案:

答案 0 :(得分:7)

只是为了澄清:当用户在UITextField中输入电话号码时,您希望它自动在适当的位置插入短划线。

答案是使用UITextFieldDelegate协议。

1)将您的控制器对象设置为UITextField的委托。

2)你会在协议中找到以下方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

每次在文本字段中发生字符更改时,都会调用此方法。

3)您希望实施的强大程度取决于您。您可以简单地对当前字符进行计数,并在3和6个字符后插入破折号。明智的做法是拒绝任何非数字字符。

以下是一个示例实现。我们基本上手动接管字段编辑 - 在适当的字符串长度后插入破折号并确保用户只能输入数字:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSCharacterSet *numSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789-"];
    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    int charCount = [newString length];

    if ([newString rangeOfCharacterFromSet:[numSet invertedSet]].location != NSNotFound
        || [string rangeOfString:@"-"].location != NSNotFound
        || charCount > 12) {
        return NO;
    }

    if (charCount == 3 || charCount == 7) {
        newString = [newString stringByAppendingString:@"-"];
    }

    textField.text = newString;

    return NO;
}

答案 1 :(得分:4)

更新了Matthew McGoogan的代码:这也适用于后空间..

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if (textField.tag == 8) {           
        NSCharacterSet *numSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789-"];
        NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
        int charCount = [newString length];

        if (charCount == 3 || charCount == 7) {
            if ([string isEqualToString:@""]){
                return YES;
            }else{
                newString = [newString stringByAppendingString:@"-"];
            }
        }

        if (charCount == 4 || charCount == 8) {
            if (![string isEqualToString:@"-"]){
                newString = [newString substringToIndex:[newString length]-1];
                newString = [newString stringByAppendingString:@"-"];
            }
        }

        if ([newString rangeOfCharacterFromSet:[numSet invertedSet]].location != NSNotFound
            || [string rangeOfString:@"-"].location != NSNotFound
            || charCount > 12) {
            return NO;
        }

        textField.text = newString;
    return NO;
}    
return YES;}

答案 2 :(得分:1)

我上面用Matthews帖子作为基础。

格式如下:(444)444-4444

它还处理退格,与上面的答案不同。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    if(textField == _txtPhone1 || textField == _txtPhone2 || textField == _txtPhone3 || textField == _txtPhone4)
    {

        NSCharacterSet *numSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789-() "];
        NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
        int charCount = [newString length];
        if ([newString rangeOfCharacterFromSet:[numSet invertedSet]].location != NSNotFound
            || [string rangeOfString:@")"].location != NSNotFound
            || [string rangeOfString:@"("].location != NSNotFound
            || [string rangeOfString:@"-"].location != NSNotFound
            || charCount > 14) {
            return NO;
        }
        if (![string isEqualToString:@""])
        {
            if (charCount == 1)
            {
                newString = [NSString stringWithFormat:@"(%@", newString];
            }
            else if(charCount == 4)
            {
                newString = [newString stringByAppendingString:@") "];
            }
            else if(charCount == 5)
            {
                newString = [NSString stringWithFormat:@"%@) %@", [newString substringToIndex:4], [newString substringFromIndex:4]];
            }
            else if(charCount == 6)
            {
                newString = [NSString stringWithFormat:@"%@ %@", [newString substringToIndex:5], [newString substringFromIndex:5]];
            }

            else if (charCount == 9)
            {
                newString = [newString stringByAppendingString:@"-"];
            }
            else if(charCount == 10)
            {
                newString = [NSString stringWithFormat:@"%@-%@", [newString substringToIndex:9], [newString substringFromIndex:9]];
            }
        }
        textField.text = newString;
        return NO;
    }
}

答案 3 :(得分:0)

使用

NSString* number = [textField.text  stringByReplacingOccurrencesOfString: @"-" withString: @""];