2016-02-19 3 views
0

Я разрабатываю приложение для iPad, в котором у меня есть форма в виде просмотра прокрутки несколько UITextField. В таком виде я много чем UITextField в один ряд, как так:UIScrollView и клавиатура iOS

enter image description here

Так когда клавиатура закрыта, и я нажимаю на «Via» UITextField со следующими методами:

- (void)keyboardWasShown:(NSNotification*)aNotification { 
    NSDictionary* info = [aNotification userInfo]; 
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

    float bottom = 0.0; 
    bottom = kbSize.height; 

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, bottom + 50, 0.0); 
    scrollView.contentInset = contentInsets; 
    scrollView.scrollIndicatorInsets = contentInsets; 

    CGRect aRect = self.view.frame; 

    aRect.size.height -= bottom + 50; 

    if (!CGRectContainsPoint(aRect, activeField.frame.origin)) { 
     CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y - (scrollView.frame.size.height - kbSize.width - 10)); 
     [scrollView setContentOffset:scrollPoint animated:YES]; 
    } 
} 

- (void)keyboardWillBeHidden:(NSNotification*)aNotification { 
    UIEdgeInsets contentInsets = UIEdgeInsetsZero; 
    scrollView.contentInset = contentInsets; 
    scrollView.scrollIndicatorInsets = contentInsets; 

    CGPoint scrollPoint = CGPointMake(0.0, 0.0); 
    [scrollView setContentOffset:scrollPoint animated:YES]; 
    activeField = nil; 
} 

все работает отлично, и просмотр прокрутки перемещается вверх, чтобы показать UITextField Я редактирую. Когда клавиатура открыта, и я нажимаю «CAP» UITextField, прокрутка просматривается, а UITextField выходит наружу. Я спрашиваю вас, как я могу избежать такого поведения.

ПРИМЕЧАНИЕ: Я не буду использовать внешнюю библиотеку для этого!

Спасибо

+0

Я думаю, вы должны попробовать этот код вверх по Scrollview - (void) textFieldDidBeginEditing: (UITextField *) textField { CGPoint scrollPoint = CGPointMake (0, textField.frame.origin.y-120); [scrollView setContentOffset: scrollPoint animated: YES]; } - (void) textFieldDidEndEditing: (UITextField *) textField { [scrollView setContentOffset: CGPointZero animated: YES]; } – Birendra

+0

вы должны установить первый размер UItextField вместо 120 – Birendra

+0

, если мой ответ будет работать для вас, тогда скажите мне, чтобы я мог опубликовать его – Birendra

ответ

0
self.automaticallyAdjustsScrollViewInsets=NO; 

Согласно документации яблоко automaticAdjustScrollViewInsets по умолчанию YES.

Таким образом, он пытается контролировать ваш прокрутки.

добавьте это в свой метод viewdidload, а затем попробуйте.

0

Вот одно решение,

Если вы не хотите писать строки кода для управления клавиатурой, основанной на TextField в Scrollview затем просто использовать это дается ниже библиотеки третьей стороны, которая будет автоматически управлять вашим текстовое поле с клавиатурой.

https://github.com/michaeltyson/TPKeyboardAvoiding

Надеется, что это будет работать для и.

+0

Посмотрите на обновление моего вопроса ... Я не буду использовать внешнюю библиотеку для своего приложения ! – lucgian841

0

я решил мою проблему, прочитав эту link in Apple documentation, поэтому в моем случае код является продолжением:

- (void)keyboardWasShown:(NSNotification*)aNotification 
{ 
    NSDictionary* info = [aNotification userInfo]; 
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height + 50 , 0.0); 
    scrollView.contentInset = contentInsets; 
    scrollView.scrollIndicatorInsets = contentInsets; 

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

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

Спасибо за ответ мне

 Смежные вопросы

  • Нет связанных вопросов^_^