2015-05-22 3 views
1

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

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    UITableViewCell *cell = (UITableViewCell *)textField.superview.superview; 
    [self.tableView scrollToRowAtIndexPath:[self.tableView indexPathForCell:cell] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
} 

Я проверил значение [self.tableView indexPathForCell: клетки] он установлен для первой строки и первого раздела.

Я думаю, что это связано с тем, что heightForHeaderInSection для первого раздела очень большой (охватывает примерно половину экрана).

+0

Потому что это уже наверху? –

+4

Не предполагайте, что ячейку можно получить из текстового поля, используя 'textField.superview.superview'. Макет subview отличается в разных версиях iOS, и он может измениться. – rmaddy

+0

OP уже упоминал, что он работает для других ячеек, не думаю, что это может быть проблемой в этом вопросе. – Vizllx

ответ

0

я столкнулся этот вопрос, просто решил его из этого блога link

Вот процесс: В методе textFieldDidBeginEditing UITextFieldDelegate только вещь, чтобы быть в курсе здесь является то, что делегат будет вызываться перед на самом деле отображается клавиатура. Для того, чтобы справиться с этим мы задерживаем скроллинг с помощью отсроченной производительность:

-(void) scrollToCell:(NSIndexPath*) path { 
    [_tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionNone animated:YES]; 
} 

-(void) textFieldDidBeginEditing:(UITextField *)textField { 
    NSIndexPath* path = [NSIndexPath indexPathForRow:row inSection:section]; 
    [self performSelector:@selector(scrollToCell:) withObject:path afterDelay:0.5f]; 
} 
+0

Спасибо, но не помогло в моем случае – david72

0

Я предполагаю, что это ошибка. Мне удалось обойти это, установив таблицу contentOffset:

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