diff --git a/Signal/src/view controllers/RegisterViewController.m b/Signal/src/view controllers/RegisterViewController.m index 12eaace0e..531652417 100644 --- a/Signal/src/view controllers/RegisterViewController.m +++ b/Signal/src/view controllers/RegisterViewController.m @@ -381,10 +381,13 @@ NSString* textBeforeChange = textField.text; // backspacing should skip over formatting characters - bool isBackspace = string.length == 0 && range.length == 1; + UITextPosition *posIfBackspace = [textField positionFromPosition:textField.beginningOfDocument + offset:(NSInteger)(range.location + range.length)]; + UITextRange *rangeIfBackspace = [textField textRangeFromPosition:posIfBackspace toPosition:posIfBackspace]; + bool isBackspace = string.length == 0 && range.length == 1 && [rangeIfBackspace isEqual:textField.selectedTextRange]; if (isBackspace) { - NSString* digits = _phoneNumberTextField.text.digitsOnly; - NSUInteger correspondingDeletePosition = [PhoneNumberUtil translateCursorPosition:range.location+range.length + NSString* digits = textBeforeChange.digitsOnly; + NSUInteger correspondingDeletePosition = [PhoneNumberUtil translateCursorPosition:range.location + range.length from:textBeforeChange to:digits stickingRightward:true]; @@ -406,10 +409,10 @@ from:textAfterChange to:textAfterReformat stickingRightward:isJustDeletion]; - _phoneNumberTextField.text = textAfterReformat; - UITextPosition *pos = [_phoneNumberTextField positionFromPosition:_phoneNumberTextField.beginningOfDocument - offset:(NSInteger)cursorPositionAfterReformat]; - [_phoneNumberTextField setSelectedTextRange:[_phoneNumberTextField textRangeFromPosition:pos toPosition:pos]]; + textField.text = textAfterReformat; + UITextPosition *pos = [textField positionFromPosition:textField.beginningOfDocument + offset:(NSInteger)cursorPositionAfterReformat]; + [textField setSelectedTextRange:[textField textRangeFromPosition:pos toPosition:pos]]; return NO; // inform our caller that we took care of performing the change }