-1
지역 번호와 3 자리 이후에 대시를 추가하는 전화 번호 형식의 앱이 있습니다. 문제는 사용하는 데이터가 미리 포맷되어 있지 않다는 것입니다. 따라서 앱이 처음 시작되면 텍스트 필드에 누군가가 입력 할 때까지 전화 번호가 서식이 지정되지 않은 것처럼 보입니다.사용자가 텍스트를 입력 할 때뿐만 아니라 앱 초기화시 shouldChangeCharactersInRange를 호출하십시오.
사용자가 입력 할 때 &의 응용 프로그램 초기화시 shouldChangeCharactersInRange의 기능을 확장하는 방법이 있습니까? 여기
내 shouldChangeCharactersInRange입니다 :- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField == _phoneNumber.tf)
{
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 (textField.text.length > 11 && range.length == 0)
{
return NO; // Change not allowed
}
else
{
//if (length == 0 || (length > 9 && !hasLeadingOne) || (length > 10))
if (length == 0 || (length > 10))
{
textField.text = decimalString;
return NO;
}
NSUInteger index = 0;
NSMutableString* formattedString = [NSMutableString string];
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;
//NSLog(@"** Formatted Phone: %@", formattedString);
numLength = formattedString.length; // 12 Characters including dashes
//NSLog(@"** Formatted Length: %lu", (unsigned long)numLength);
}
return NO;
}
return YES;
}