Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

becomeFirstResponder resets contentOffset

I have a UIScrollView in which inside of that I have a UITextField, so what I did is that on the third text field, which is password, I scrolled down the offset of the UIScrollView:

#pragma mark UITextFieldDelegate
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    if ((textField == self.emailTextField_ || textField == self.passwordTextField_)){
        if (self.scrollView_.contentOffset.y != self.emailTextField_.frameY - self.emailTextField_.frameHeight/2){
            shouldAdjustOffset = YES;
        } else {
            shouldAdjustOffset = NO;
        }

        if (shouldAdjustOffset){
            [self.scrollView_ setContentOffset:CGPointMake(0, self.emailTextField_.frameY - self.emailTextField_.frameHeight/2) animated:YES];
        }
    }
}

-(BOOL) textFieldShouldReturn:(UITextField *)textField
{
    if (textField == self.firstNameTexField_){
        [self.firstNameTexField_ resignFirstResponder];
        [self.lastNameTextField_ becomeFirstResponder];
    } else if (textField == self.lastNameTextField_){
        [self.lastNameTextField_ resignFirstResponder];
        [self.emailTextField_ becomeFirstResponder];
    } else if (textField == self.emailTextField_){
        [self.emailTextField_ resignFirstResponder];
        [self.passwordTextField_ becomeFirstResponder];
    } else if (textField == self.passwordTextField_){
        [self signupButtonPressed:nil];
        [self.passwordTextField_ resignFirstResponder];
    }

    return YES;
}

Now the issue is that when I am on the next text field it resets the content offset back to 0, when I do:

 [self.emailTextField_ resignFirstResponder];
        [self.passwordTextField_ becomeFirstResponder];

. How can I prevent this from happening?

like image 543
adit Avatar asked Oct 09 '12 22:10

adit


1 Answers

Just turn of scrollview scroll before showing keypad (becomeFirstResponder) and enable back the scroll after it,

scrollView.scrollEnabled = NO;
[someControl becomeFirstResponder];
scrollView.scrollEnabled = YES;
[scrollview doTheScrollingHere];
like image 174
Deepan Avatar answered Oct 11 '22 06:10

Deepan