2012-10-09 32 views
5

Tengo un UIScrollView en la que el interior de la que tengo un UITextField, así que lo que hice es que en el campo de texto tercero, que es la contraseña, me desplacé por el desplazamiento de la UIScrollView:becomeFirstResponder restablece contentOffset

#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; 
} 

Ahora el problema es que cuando estoy en el siguiente campo de texto se restablece el contenido de desplazamiento de nuevo a 0, cuando lo haga:

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

. ¿Cómo puedo evitar que esto suceda?

Respuesta

3

Sólo giro de desplazamiento ScrollView antes de mostrar el teclado (becomeFirstResponder) y permitir que el rollo hacia atrás después de que,

scrollView.scrollEnabled = NO; 
[someControl becomeFirstResponder]; 
scrollView.scrollEnabled = YES; 
[scrollview doTheScrollingHere]; 
0

@Deepan usted me salvó un montón de tiempo :) Sólo lo voy a sugerir es para anular UITextField método becomeFirstResponder comprobar primero si está en UIScrollView y si es neutralización de desplazamiento por un momento

- (BOOL)becomeFirstResponder 
{ 
    if ([self.superview isKindOfClass:[UIScrollView class]]) 
    { 
     [(UIScrollView*)self.superview setScrollEnabled:NO]; 
    } 

    BOOL accept = [super becomeFirstResponder]; 

    if ([self.superview isKindOfClass:[UIScrollView class]]) 
    { 
     [(UIScrollView*)self.superview setScrollEnabled:YES]; 
    } 

    return accept 
} 
Cuestiones relacionadas