|
|
|
@ -352,7 +352,7 @@
|
|
|
|
|
forCountry:(NSString *)country {
|
|
|
|
|
_countryCodeLabel.text = code;
|
|
|
|
|
_countryNameLabel.text = country;
|
|
|
|
|
[self updatePhoneNumberFieldWithString:code];
|
|
|
|
|
[self updatePhoneNumberFieldWithString:code cursorposition:_enteredPhoneNumber.length];
|
|
|
|
|
[vc dismissViewControllerAnimated:YES completion:nil];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -362,26 +362,61 @@
|
|
|
|
|
|
|
|
|
|
#pragma mark - UITextFieldDelegate
|
|
|
|
|
|
|
|
|
|
- (NSUInteger) calculateLocationOffset:(NSUInteger)location {
|
|
|
|
|
NSUInteger offset = 0, phonenumberposition = 0;
|
|
|
|
|
for (NSUInteger i = 0; i < location; i++) {
|
|
|
|
|
if ([_phoneNumberTextField.text characterAtIndex:i] != [_enteredPhoneNumber characterAtIndex:phonenumberposition]) {
|
|
|
|
|
offset++;
|
|
|
|
|
} else {
|
|
|
|
|
phonenumberposition++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return offset;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
|
|
|
|
|
replacementString:(NSString *)string {
|
|
|
|
|
|
|
|
|
|
NSUInteger offset = [self calculateLocationOffset:range.location];
|
|
|
|
|
unichar currentPoschar = 0;
|
|
|
|
|
range.location -= offset;
|
|
|
|
|
BOOL handleBackspace = range.length == 1;
|
|
|
|
|
if (handleBackspace) {
|
|
|
|
|
NSRange backspaceRange = NSMakeRange([_enteredPhoneNumber length] - 1, 1);
|
|
|
|
|
if ((range.location + offset) < _phoneNumberTextField.text.length) {
|
|
|
|
|
currentPoschar = [_phoneNumberTextField.text characterAtIndex:(range.location + offset)];
|
|
|
|
|
}
|
|
|
|
|
if ((currentPoschar < '0' || currentPoschar > '9') && currentPoschar != 0) {
|
|
|
|
|
range.location--;
|
|
|
|
|
}
|
|
|
|
|
NSRange backspaceRange = NSMakeRange(range.location, 1);
|
|
|
|
|
[_enteredPhoneNumber replaceCharactersInRange:backspaceRange withString:string];
|
|
|
|
|
range.location++;
|
|
|
|
|
} else {
|
|
|
|
|
NSString* sanitizedString = [[string componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet ] invertedSet]] componentsJoinedByString:@""];
|
|
|
|
|
[_enteredPhoneNumber appendString:sanitizedString];
|
|
|
|
|
NSMutableString* mutablePhoneNumber = [NSMutableString stringWithString:_enteredPhoneNumber];
|
|
|
|
|
[mutablePhoneNumber insertString:sanitizedString atIndex:range.location];
|
|
|
|
|
_enteredPhoneNumber = mutablePhoneNumber;
|
|
|
|
|
if ((range.location + offset + 1) < _phoneNumberTextField.text.length) {
|
|
|
|
|
currentPoschar = [_phoneNumberTextField.text characterAtIndex:(range.location + offset + 1)];
|
|
|
|
|
}
|
|
|
|
|
if ((currentPoschar < '0' || currentPoschar > '9') && currentPoschar != 0) {
|
|
|
|
|
range.location++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[self updatePhoneNumberFieldWithString:_enteredPhoneNumber];
|
|
|
|
|
[self updatePhoneNumberFieldWithString:_enteredPhoneNumber cursorposition:range.location+offset];
|
|
|
|
|
return NO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
-(void) updatePhoneNumberFieldWithString:(NSString*) input {
|
|
|
|
|
-(void) updatePhoneNumberFieldWithString:(NSString*)input
|
|
|
|
|
cursorposition:(NSUInteger)cursorpos {
|
|
|
|
|
NSString* result = [PhoneNumber bestEffortFormatPartialUserSpecifiedTextToLookLikeAPhoneNumber:_enteredPhoneNumber
|
|
|
|
|
withSpecifiedCountryCodeString:_countryCodeLabel.text];
|
|
|
|
|
cursorpos += result.length - _phoneNumberTextField.text.length;
|
|
|
|
|
_phoneNumberTextField.text = result;
|
|
|
|
|
UITextPosition *position = [_phoneNumberTextField positionFromPosition:[_phoneNumberTextField beginningOfDocument]
|
|
|
|
|
offset:(NSInteger)cursorpos];
|
|
|
|
|
[_phoneNumberTextField setSelectedTextRange:[_phoneNumberTextField textRangeFromPosition:position
|
|
|
|
|
toPosition:position]];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@end
|
|
|
|
|