У меня есть классический сгруппированный UITableView с доступным для редактирования UITextViews в каждой ячейке. Этот текст просматривает, может быть единственным или мультивыровненным, и я хочу, чтобы ячейка увеличила свою высоту, как пользователь пишет, и текст запускает новую строку.
Мой вопрос: я должен перезагрузить целую таблицу только для увеличения высоты ячейки? Нет ли никакой другой метод?
Я искал много, и предыдущие ответы и учебные руководства просто говорят о том, как вычислить текстовую высоту, как реализовать heightForRowAtIndexPath... вещи, которые я уже знаю. Мое беспокойство - то, что, для достижения, что я хочу я должен буду вычислить высоту и перезагрузить таблицу каждый раз, когда пользователь вводит новый символ, который я не нахожу очень чистыми или эффективными.
Спасибо.
Не всегда нужно перезагружать всю таблицу. Вместо этого можно просто перезагрузить одну строку.
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
Чтобы быть более точным, да, вы должны реализовать tableView:heightForRowAtIndexPath:
для вычисления новой высоты, затем сделать, как говорит rickharrison, и вызвать [tableView reloadRowsAtIndexPaths:withRowAnimation]
. Допустим, ваши ячейки могут иметь расширенную высоту и обычную высоту, и вы хотите, чтобы они увеличивались при нажатии на них. Вы можете сделать:
-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*) indexPath
{
if ([expandedPaths containsObject:indexPath]) {
return 80;
} else {
return 44;
}
}
-(void)tableView:(UITableView*) didSelectRowAtIndexPath:(NSIndexPath*) indexPath
{
[expandedPaths addObject:indexPath];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}