J'ai un champ de texte où l'utilisateur entre des données. C'est un champ de numéro de téléphone. Si l'utilisateur entre 1234567890
, je souhaite qu'il soit affiché sous la forme (123)-(456)-7890
à la saisie de l'utilisateur. Comment est-ce possible?
Réponses
Trop de publicités?Cela vous aidera
Format (xxx) - xxx-xxxx
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
int length = [self getLength:textField.text];
//NSLog(@"Length = %d ",length);
if(length == 10)
{
if(range.length == 0)
return NO;
}
if(length == 3)
{
NSString *num = [self formatNumber:textField.text];
textField.text = [NSString stringWithFormat:@"(%@) ",num];
if(range.length > 0)
textField.text = [NSString stringWithFormat:@"%@",[num substringToIndex:3]];
}
else if(length == 6)
{
NSString *num = [self formatNumber:textField.text];
//NSLog(@"%@",[num substringToIndex:3]);
//NSLog(@"%@",[num substringFromIndex:3]);
textField.text = [NSString stringWithFormat:@"(%@) %@-",[num substringToIndex:3],[num substringFromIndex:3]];
if(range.length > 0)
textField.text = [NSString stringWithFormat:@"(%@) %@",[num substringToIndex:3],[num substringFromIndex:3]];
}
return YES;
}
-(NSString*)formatNumber:(NSString*)mobileNumber
{
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"(" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@")" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@" " withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"-" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"+" withString:@""];
NSLog(@"%@", mobileNumber);
int length = [mobileNumber length];
if(length > 10)
{
mobileNumber = [mobileNumber substringFromIndex: length-10];
NSLog(@"%@", mobileNumber);
}
return mobileNumber;
}
-(int)getLength:(NSString*)mobileNumber
{
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"(" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@")" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@" " withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"-" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"+" withString:@""];
int length = [mobileNumber length];
return length;
}
Cela paraissait plus clair et permettait de supprimer beaucoup plus gentiment les caractères indésirables. Formate correctement pour 1 (###) ### - #### ou (###) ### - ####
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSArray *components = [newString componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]];
NSString *decimalString = [components componentsJoinedByString:@""];
NSUInteger length = decimalString.length;
BOOL hasLeadingOne = length > 0 && [decimalString characterAtIndex:0] == '1';
if (length == 0 || (length > 10 && !hasLeadingOne) || (length > 11)) {
textField.text = decimalString;
return NO;
}
NSUInteger index = 0;
NSMutableString *formattedString = [NSMutableString string];
if (hasLeadingOne) {
[formattedString appendString:@"1 "];
index += 1;
}
if (length - index > 3) {
NSString *areaCode = [decimalString substringWithRange:NSMakeRange(index, 3)];
[formattedString appendFormat:@"(%@) ",areaCode];
index += 3;
}
if (length - index > 3) {
NSString *prefix = [decimalString substringWithRange:NSMakeRange(index, 3)];
[formattedString appendFormat:@"%@-",prefix];
index += 3;
}
NSString *remainder = [decimalString substringFromIndex:index];
[formattedString appendString:remainder];
textField.text = formattedString;
return NO;
}
Nous avons écrit une sous-classe NSFormatter personnalisée pour les numéros de téléphone ici: https://github.com/edgecase/PhoneNumberFormatter
Vous pouvez l'utiliser comme n'importe quelle autre sous-classe NSFormatter.
Merci beaucoup pour la première réponse, mais je pense que cette méthode "- (int) getLength: (NSString *) mobileNumber" est inutile. Vous pouvez essayer quelque chose comme ça:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
int length = [[self formatNumber:[textField text]] length];
if (length == 10) {
if(range.length == 0) {
return NO;
}
}
if (length == 3) {
NSString *num = [self formatNumber:[textField text]];
textField.text = [NSString stringWithFormat:@"(%@) ",num];
if (range.length > 0) {
[textField setText:[NSString stringWithFormat:@"%@",[num substringToIndex:3]]];
}
}
else if (length == 6) {
NSString *num = [self formatNumber:[textField text]];
[textField setText:[NSString stringWithFormat:@"(%@) %@-",[num substringToIndex:3],[num substringFromIndex:3]]];
if (range.length > 0) {
[textField setText:[NSString stringWithFormat:@"(%@) %@",[num substringToIndex:3],[num substringFromIndex:3]]];
}
}
return YES;
}
- (NSString*)formatNumber:(NSString*)mobileNumber {
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"(" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@")" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@" " withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"-" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"+" withString:@""];
int length = [mobileNumber length];
if (length > 10) {
mobileNumber = [mobileNumber substringFromIndex: length-10];
}
return mobileNumber;
}
Ahmed Abdelkader a écrit une bibliothèque à cette fin. Je le recommande fortement.