From bde62ed7cb8a2a432135395d3b4a4cc3c56c1b8d Mon Sep 17 00:00:00 2001 From: Hannes Hofer Date: Thu, 31 Jul 2014 13:06:08 -0700 Subject: [PATCH] do not reposition cursor to end of number on change restore cursor position after update. cursor position must be restored after update. when non number chars are deleted or inserted move cursor position for -1 or 1 respectively --- .../view controllers/RegisterViewController.m | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/Signal/src/view controllers/RegisterViewController.m b/Signal/src/view controllers/RegisterViewController.m index d4248e547..fd9cdb580 100644 --- a/Signal/src/view controllers/RegisterViewController.m +++ b/Signal/src/view controllers/RegisterViewController.m @@ -381,7 +381,7 @@ #pragma mark - UITextFieldDelegate -- (NSUInteger) recalculateLocation:(NSUInteger)location { +- (NSUInteger) calculateLocationOffset:(NSUInteger)location { uint offset = 0, phonenumberposition = 0; for (uint i=0;i '9') + range.location --; NSRange backspaceRange = NSMakeRange(range.location, 1); [_enteredPhoneNumber replaceCharactersInRange:backspaceRange withString:string]; + range.location ++; } else { NSString* sanitizedString = [[string componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet ] invertedSet]] componentsJoinedByString:@""]; NSMutableString* mutablePhoneNumber = [NSMutableString stringWithString:_enteredPhoneNumber]; [mutablePhoneNumber insertString:sanitizedString atIndex:range.location]; _enteredPhoneNumber = mutablePhoneNumber; + if ((range.location + offset +1) < _phoneNumberTextField.text.length) + currentPosCharacter = [_phoneNumberTextField.text characterAtIndex:(range.location + offset +1)]; + + if ((currentPosCharacter < '0' || currentPosCharacter > '9') && currentPosCharacter != 0) + range.location++; } - [self updatePhoneNumberFieldWithString:_enteredPhoneNumber cursorposition:range.location+1]; + [self updatePhoneNumberFieldWithString:_enteredPhoneNumber cursorposition:range.location+offset]; return NO; } @@ -416,7 +428,11 @@ 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