2012-10-09 2 views
5

Tôi có một UIScrollView trong đó bên trong rằng tôi có một UITextField, vì vậy những gì tôi đã làm là trên các lĩnh vực văn bản thứ ba, đó là mật khẩu, tôi cuộn xuống bù đắp của UIScrollView:becomeFirstResponder reset 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; 
} 

Bây giờ vấn đề là khi tôi đang trên lĩnh vực văn bản bên cạnh nó reset nội dung bù đắp trở về 0, khi tôi làm:

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

. Làm thế nào tôi có thể ngăn chặn điều này xảy ra?

Trả lời

3

Chỉ cần lần lượt của scrollview cuộn trước khi hiển thị bàn phím (becomeFirstResponder) và cho phép trở lại cuộn sau nó,

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

@Deepan bạn lưu lại cho tôi rất nhiều thời gian :) Chỉ những gì tôi sẽ đề nghị là để ghi đè UITextField phương pháp becomeFirstResponder để kiểm tra đầu tiên nếu nó đang trong UIScrollView và nếu là disable cuộn trong một khoảnh khắc

- (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 
}