Как заставить строку UITableView динамически расти с измененным пользователем контентом - PullRequest
3 голосов
/ 28 марта 2012

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

У меня есть подкласс UITableViewCell, у которого есть несколько разных подвидов, одним из которых является UITextField, который я могу редактировать как пользователь. Естественно, textField увеличивается с введенным текстом.

Теперь вопрос в том, как я могу увеличить строку таблицы с textField.

У меня есть несколько ячеек разных размеров, поэтому я знаю, как использовать - (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath, но проблема в том, что мне нужно изменить после того, как ячейка уже находится в табличном представлении.

Также обратите внимание, что ранее отмеченный метод делегата вызывается до метода делегата источника данных - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

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

Интересно, что Apple делает то, что хочет, в своем приложении iTunes U. Когда вы нажимаете на назначение, оно расширяется. Я думаю, что они используют табличные представления их права?

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

Надеюсь, это может помочь и другим, потому что это горячая тема, но никто не задает вопрос хорошо или не получает хороших ответов.

1 Ответ

5 голосов
/ 28 марта 2012

На самом деле, об этом спрашивали и отвечали много раз - это не невозможно.Выполните поиск «UITableView настраиваемая высота строки» или «UITableView multi line UITextField» или аналогичные, и вы найдете несколько хорошо отвеченных вопросов.

Вы на правильном пути - вам нужно вернуть высотуtableView:heightForRowAtIndexPath:, хотя этот метод вызывается перед созданием / настройкой ячейки.Это нормально ... вам просто нужен способ вычислить эту высоту без ячейки.Другие ответы ссылаются на -[NSString sizeWithFont:constrainedToSize:] и связанные методы ... это должно привести вас на правильный путь.

Изменение высоты при редактировании текстового поля менее очевидно, но этот ответ имеетключ ... если вы вызовете

[tableView beginUpdates];
[tableView endUpdates];

, табличное представление не только снова запросит у своего делегата heightForRowAtIndexPath: и изменит размер ячейки для соответствия, но и с плавной анимацией.

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