我需要在文本字段中输入手机号码。
我需要显示手机号码,如123-456-7890格式。
例如:1234567890是我的手机号码,我在文本字段中输入此手机号码,
对于我需要放置的前三位数 - 再经过3位数后我需要放置 - 。
如果我输入123然后自动放置 - 在文本字段中,在456之后,不需要再放置4位数。
类似于以货币格式显示文字。
但是从该文本字段获取文本时我需要获取手机号码 - 如1234567890,而不是123-456-7890。
我认为现在我的问题很清楚,如果不是,请加上评论。
提前感谢你。
答案 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: @""];