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

Mah*_*abu 1 iphone

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

我需要显示这种格式的手机号码123-456-7890.

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

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

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

类似于以货币格式显示文本.

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

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

提前谢谢你.

Mat*_*gan 7

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

答案是使用UITextFieldDelegate协议.

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

2)您将在协议中找到以下方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
Run Code Online (Sandbox Code Playgroud)

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

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;
}
Run Code Online (Sandbox Code Playgroud)