2012-10-09 14 views
5

Ho un UIScrollView in cui all'interno di che ho un UITextField, quindi quello che ho fatto è che sul terzo campo di testo, che è la password, ho scorrere verso il basso l'offset del UIScrollView:becomeFirstResponder azzera 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; 
} 

Ora il problema è che quando sono sul prossimo campo di testo azzera il contenuto di offset di nuovo a 0, quando lo faccio:

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

. Come posso evitare che ciò accada?

risposta

3

Basta volgere del ScrollView scorrimento prima di mostrare la tastiera (becomeFirstResponder) e attivare di nuovo il rotolo dopo che,

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

@Deepan voi mi ha salvato un sacco di tempo :) Solo quello che mi propongo è quello di ignorare UITextField metodo becomeFirstResponder per verificare prima se è in UIScrollView e se è disable scorrimento per 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 
} 
Problemi correlati