Программные изменения вкладок прокрутки UITableView для отображения размера клавиатуры iPhone - PullRequest
2 голосов
/ 21 августа 2009

Я знаю, что вы можете использовать свойство "Вставка" в Интерфейсном Разработчике, чтобы сделать представление прокрутки вставленным из главного окна, чтобы оно не выходило за пределы существующих элементов управления на экране, таких как панель вкладок, но как это сделать?сделать это программно, чтобы настроить, когда клавиатура добавляется на экран?В настоящее время в моем представлении прокрутки есть ячейки под клавиатурой, которые недоступны, потому что представление все еще регистрирует нижнюю часть представления прокрутки как нижнюю часть телефона, а не верхнюю часть клавиатуры.

Ответы [ 4 ]

7 голосов
/ 21 августа 2009
#pragma mark Keyboard Handling



- (void) viewDidAppear:(BOOL) ani {
    onscreen = YES;

    NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
    [center addObserver:self selector:@selector(keyboardWillAppear:) name:UIKeyboardWillShowNotification object:nil];
    [center addObserver:self selector:@selector(keyboardDidAppear:) name:UIKeyboardDidShowNotification object:nil];
    [center addObserver:self selector:@selector(keyboardWillDisappear:) name:UIKeyboardWillHideNotification object:nil];
}

- (void) viewDidDisappear:(BOOL) ani {
    onscreen = NO;

    NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
    [center removeObserver:self name:UIKeyboardWillShowNotification object:nil];
    [center removeObserver:self name:UIKeyboardDidShowNotification object:nil];
    [center removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}

- (void) keyboardWillAppear:(NSNotification*) n {
    NSLog(@"Keyboard is about to appear");
}

- (void) keyboardDidAppear:(NSNotification*) n {

    CGRect bounds = [[[n userInfo] objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue];
    bounds = [self.view convertRect:bounds fromView:nil];

    CGRect tableFrame = searchResultsTable.frame;
    tableFrame.size.height -= bounds.size.height; // subtract the keyboard height
    if (self.tabBarController != nil) {
        tableFrame.size.height += 48; // add the tab bar height
    }

    [UIView beginAnimations:nil context:NULL];

    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(shrinkDidEnd:finished:contextInfo:)];
    searchResultsTable.frame = tableFrame;
    [UIView commitAnimations];

    //[self hideEditorView:currentEditorView];
    //[currentEditorView removeFromSuperview];
}

- (void) shrinkDidEnd:(NSString*) ident finished:(BOOL) finished contextInfo:(void*) nothing {
    NSIndexPath* sel = [searchResultsTable indexPathForSelectedRow];

    if (![[searchResultsTable indexPathsForVisibleRows] containsObject:sel])
    {
        [searchResultsTable scrollToNearestSelectedRowAtScrollPosition:UITableViewScrollPositionMiddle animated:YES];
    }
}

- (void) keyboardWillDisappear:(NSNotification*) n {
    CGRect bounds = [[[n userInfo] objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue];
    bounds = [self.view convertRect:bounds fromView:nil];

    CGRect tableFrame = searchResultsTable.frame;
    tableFrame.size.height += bounds.size.height; // add the keyboard height

    if (self.tabBarController != nil) {
        tableFrame.size.height -= 48; // subtract the tab bar height
    }

    [UIView beginAnimations:nil context:NULL];

    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(shrinkDidEnd:finished:contextInfo:)];
    searchResultsTable.frame = tableFrame;    
    [UIView commitAnimations];

    [searchResultsTable scrollToNearestSelectedRowAtScrollPosition:UITableViewScrollPositionMiddle animated:YES];
}
1 голос
/ 21 августа 2009

Два варианта. (когда вы говорите прокрутку, я думаю, что вы имеете в виду табличное представление, так как заголовок подсказывает так)

  1. Используйте UITableViewController, если клавиатура добавлена ​​в представление таблицы, я думаю, что она сделает изменение размера за вас

  2. В текстовом поле или протоколе текстового поля в методе - (void)textFieldDidBeginEditing:(UITextField *)textField измените размер фрейма табличного представления, и конец завершил редактирование, установите его обратно так (это также можно сделать, если это представление с прокруткой, а не tableView)

    • (void) textFieldDidBeginEditing: (UITextField *) textField { CGRect frame = tableView.frame; // или просмотр с прокруткой frame.size.height = frame.size.height- keyboardHeight; tableView.frame = кадр }

    • (void) textFieldDidEndEditing: (UITextField *) textField { CGRect frame = tableView.frame; // или просмотр с прокруткой frame.size.height = frame.size.height + keyboardHeight; tableView.frame = кадр }

Надеюсь, это поможет

0 голосов
/ 19 ноября 2011

Я создал небольшой проект, который решает эту проблему с помощью клавиатуры, в моем случае мне нужно только увеличивать представление таблицы при появлении клавиатуры.

Надеюсь, это поможет!

http://git.io/BrH9eQ

0 голосов
/ 28 марта 2011

Еще один простой способ с помощью Interface Builder или кода

Установите для свойства [ Table View Size Footer Height ] значение 200 (поэкспериментируйте с этим для вашего макета). Это фактически делает таблицу больше, чем ограничивающий фрейм, в котором она содержится, что позволяет прокручивать таблицу выше, чем обычно.

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

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