2012-02-28 1 views
3

В настоящее время у меня есть UITableView с пользовательскими ячейками, и в каждой ячейке есть UITextField, проблема в том, что иногда UITextField покрывается UIKeyboard.Прокрутить пользовательский UITableViewCell прямо над клавиатурой?

Так что прямо сейчас у меня есть координата Y для UIKeyboard, и мой UITableView корректно работает с ячейками.

Как я могу использовать эту координату Y (float), чтобы прокрутить мой UITableView до этой координаты Y и высоту ячейки, чтобы получить ее прямо над моей UIKeyboard?

Также, когда я скрываю клавиатуру, как бы сбросить UITableView в нормальное положение, в котором он находился?

Любой совет будет оценен!

Спасибо!

CustomCell *cell = (CustomCell*)[[thetextField superview] superview]; 
    CGRect cellRect = [cell convertRect:cell.frame toView:self.view]; 
    float bottomCell = cellRect.origin.y - cellRect.size.height; 
    if (bottomCell >= keyboardY) { 
     NSIndexPath *indexPath = [thetableView indexPathForCell:cell]; 
     [thetableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
    } 
+0

Метод 'scrollToRowAtIndexPath' знает видимую часть вашего tableView, поэтому вам не нужен оператор if. – inorganik

ответ

2

Один или другой из UITableView «s

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated; 
- (void)scrollToNearestSelectedRowAtScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated; 

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

CustomCell *cell = (CustomCell *)[[theTextField superview] superview]; 
NSIndexPath *indexPath = [theTableView indexPathForCell:cell]; 
[theTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; 

Хорошо, если вы уверены, что это вызывался, то убедитесь, что ваш indexPath не ноль, что может произойти, если клетка не в Tableview или, если это не клетка.

+0

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

+0

Отправьте свой код, пожалуйста. – QED

+0

Я разместил его выше :) P.S - Это утверждение if вызывается (подтверждено NSLogs) –

0

UITableView настраивается каждый раз, когда отображается клавиатура.

Однако, это не будет сделано, если вы не установили UITableViewCellSelectionStyle вашей пользовательской ячейки в UITableViewCellSelectionStyleNone.

Я решил использовать приведенный ниже код.

[cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
Смежные вопросы