вторник, 18 мая 2010 г.

Загадочные многоточия в ячейках TableView (UITableViewCell)

Бился несколько часов, чтобы понять, почему у меня в некоторых ячейках TableView текст отображается корректно (с переносом строки), а в некоторых - вместо переноса строки текст заканчивается загадочным многоточием. Ведь я сделал всё для того, чтобы индивидуально задать высоту каждой отдельной ячейки TableView. Я даже сделал собственный класс для ячейки таблицы, т.е. класс унаследованный от UITableViewCell (кстати - это очень удобно, потому что можно избежать нагромождений кода в классе вашего TableView-контроллера, унаследованного от UITableViewController, т.е. вы можете вынести все вычисления размеров текста именно в ваш класс ячейки таблицы.

Оказалось, что в TableView-контроллерном классе нужно обратить внимание на одну важную функцию:

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// бла-бла-бла...

if (cell == nil)
cell = [[[MyCustomTableCell alloc]
initWithStyle:UITableViewCellStyleDefault // или другой стиль
reuseIdentifier:nil] // ВОТ ТУТ ПОСТАВЬТЕ nil вместо CellIdentifier (NSString* строки)
autorelease];
// бла-бла-бла...
}


Оказывается, если вы поставите nil вместо строки, вы тем самым ЗАПРЕТИТЕ ПОВТОРНОЕ ИСПОЛЬЗОВАНИЕ ЯЧЕЕК ОДНОГО И ТОГО ЖЕ РАЗМЕРА, что будет вам гарантировать создание каждой индивидуальной ячейки с её индивидуальными размерами. Теперь весь текст будет исправно влезать (если вы конечно не ошиблись с вычислением размеров под текст).

Кстати, вы можете вообще вместо initWithStyle в вашем классе ячейки добавить множество других функций для более удобной инициализации ячейки, например initWithStyleAndMyParameters - никто не запрещает вам кроме важных стандартных параметров в процессе создания ячейки передать ещё несколько нужных вам параметров (например указатель или даже C++ ссылку на текст). В конце концов, вы можете просто переделать initWithStyle функцию под свои нужды.

Комментариев нет:

Отправить комментарий

Постоянные читатели

Архив блога