2012-01-25 2 views
2

Я пробовал это, но просмотр слишком мало для прокрутки вверх. Как я могу прокручивать больше?Как прокрутить представление, когда клавиатура появляется в объективе c?

// Call this method somewhere in your view controller setup code. 
- (void)registerForKeyboardNotifications 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardWasShown:) 
               name:UIKeyboardDidShowNotification object:nil]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardWillBeHidden:) 
               name:UIKeyboardWillHideNotification object:nil]; 

} 

// Called when the UIKeyboardDidShowNotification is sent. 
- (void)keyboardWasShown:(NSNotification*)aNotification 
{ 
NSDictionary* info = [aNotification userInfo]; 
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0); 
scroll.contentInset = contentInsets; 
scroll.scrollIndicatorInsets = contentInsets; 

// If active text field is hidden by keyboard, scroll it so it's visible 
// Your application might not need or want this behavior. 
CGRect aRect = self.view.frame; 
aRect.size.height -= kbSize.height; 
if (!CGRectContainsPoint(aRect, EPostaText.frame.origin)) { 
    CGPoint scrollPoint = CGPointMake(0.0, EPostaText.frame.origin.y-(aRect.size.height)); 
    [scroll setContentOffset:scrollPoint animated:YES]; 
} 
} 

// Called when the UIKeyboardWillHideNotification is sent 
- (void)keyboardWillBeHidden:(NSNotification*)aNotification 
{ 
UIEdgeInsets contentInsets = UIEdgeInsetsZero; 
scroll.contentInset = contentInsets; 
scroll.scrollIndicatorInsets = contentInsets; 
} 

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
EPostaText = textField; 

} 

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
EPostaText = nil; 
} 
+0

http://stackoverflow.com/questions/2307200/iphone-keyboard-hides-textfield/6452886#6452886 – tipycalFlow

ответ

2

Лучший подход - это изменить размер вида прокрутки контейнера видимой области и использовать это:

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated 
0

Так как я нашел его, я использую TPKeyboardAvoiding

Это работает прекрасно, и очень легко настроить:

  1. Добавить UIScrollView в ваш контроллер контроллера xib
  2. Установите класс мнения, скроллинга к TPKeyboardAvoidingScrollView (еще в XIb, с помощью инспектора идентичности)
  3. Поместите все элементы управления в пределах этого Scrollview

Удачи!

0

Это мой код, надеюсь, он вам поможет. Она работает нормально, в случае, если у вас есть много текстового поля

CGPoint contentOffset; 
bool isScroll; 
- (void)textFieldDidBeginEditing:(UITextField *)textField { 
    contentOffset = self.myScroll.contentOffset; 
    CGPoint newOffset; 
    newOffset.x = contentOffset.x; 
    newOffset.y = contentOffset.y; 
    //check push return in keyboar 
    if(!isScroll){ 
     //180 is height of keyboar 
     newOffset.y += 180; 
     isScroll=YES; 
    } 
    [self.myScroll setContentOffset:newOffset animated:YES]; 
} 

- (BOOL)textFieldShouldReturn:(UITextField *)textField{ 
    //reset offset of content 
    isScroll = NO; 
    [self.myScroll setContentOffset:contentOffset animated:YES]; 
    [textField endEditing:true]; 
    return true; 
} 
Смежные вопросы