IOS Управление клавиатурой - перемещение содержимого UIScrollView вверх - PullRequest
0 голосов
/ 19 октября 2011

Я использую пример из библиотеки разработчиков IOS для управления клавиатурой. Текстовое, веб-издание и руководство по программированию

Я создал вид, используя IB. Это простой пользовательский интерфейс, который имеет UIScrollView, UITextView, UIButton и UITextField. Я поместил UIScrollView на свое представление, а затем добавил все остальные элементы управления в качестве дочерних элементов этого scrollview. Scrollview открывается для viewcontroller через IBOutlet "scrollView".

Следующий код выполняется, когда пользователь устанавливает фокус на textField, но я никогда не вижу, чтобы появлялась полоса прокрутки и содержимое полосы прокрутки не перемещалось. Должен ли я видеть полосу прокрутки по умолчанию? Может кто-нибудь сказать мне, что мне не хватает?

  -(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);
    scrollView.contentInset = contentInsets;
    scrollView.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, activeField.frame.origin) ) {
        CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height);
        [scrollView setContentOffset:scrollPoint animated:YES];
    }
}

Опять же, я беру этот код прямо из руководства по программированию IOS по ссылке. Макет пользовательского интерфейса выглядит как основное окно чата. Я хотел бы переместить поле ввода вверх, пока отображается программная клавиатура. Спасибо! Обновление

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

 CGPoint scrollPoint = CGPointMake(0.0, (activeField.frame.origin.y - kbSize.height) + 10.0);

Почему я не вижу полосы прокрутки?

Ответы [ 2 ]

1 голос
/ 21 ноября 2013

ЕСЛИ ВЫ ПРОИЗВОДИТЕ РОДИТЕЛЯ КАК СВИТОК, ЧЕМ ПРОСТО ИСПОЛЬЗОВАТЬ: UITextFielddelegate и установите методы

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    if(textField == self.txtUserName)
    {
       [self.txtPassword becomeFirstResponder];
    } 
    else if(textField == self.txtPassword){
       [self.txtPassword resignFirstResponder];
        CGPoint bottomOffset = CGPointMake(0, 0);
       [scrView setContentOffset:bottomOffset animated:YES];
       [textField resignFirstResponder];
   }
    return YES;
}

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
   if (textField == self.txtUserName)
   {
       CGPoint bottomOffset = CGPointMake(0, 80);
       [scrView setContentOffset:bottomOffset animated:YES];
   }
   if (textField == self.txtPassword)
   {
      CGPoint bottomOffset = CGPointMake(0, 135);
     [scrView setContentOffset:bottomOffset animated:YES];
  }

}

0 голосов
/ 25 октября 2011

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

Если вы хотите показать полосы прокрутки, я считаю, UIScrollView определяет метод flashScrollIndicators, который должен показывать полосы прокрутки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...