2010-10-28 6 views
2

Я пытаюсь получить ячейки таблицы переменной высоты реализованы и то, что я думал, что было бы элегантное решение оказалось в переполнение рекурсии/стек:Как получить таблицу целевой ячейки внутри tableView: heightForRowAtIndexPath :?

- (CGFloat)tableView:(UITableView *)aTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

    MyCustomCell *cell = (MyCustomCell *)[aTableView cellForRowAtIndexPath:indexPath]; 

    return [cell heightForObject:...]; // passing data object on indexPath 
} 

Все метки ячейки таблицы и другие просматривать свойства инициализируются при создании (обычным способом tableView:cellForRowAtIndexPath:). Таким образом, моя идея состояла в том, что я мог бы переместить вычисления, специфичные для высоты, из контроллера таблицы для моей пользовательской реализации ячейки, как это. Я мог бы использовать одну и ту же ячейку в других контроллерах таблиц без малейшего дублирования кода. heightForObject: может посмотреть на его подвид, какие шрифты они используют и построить значение этой высоты. Черт, я мог бы даже изменить размер шрифта для определенных ярлыков ячеек, и они должны теоретически правильно обновить их высоту.

Как уже упоминалось, я ударил эту проблему с переполнением стека с помощью этого кода. Как я могу получить эту целевую ячейку, для которой вызывается tableView:heightForRowAtIndexPath:?

+0

Я просто подумал, что это может быть результатом того, как UITableView удается это клетка. Как если бы вы прокручивались вглубь вниз в таблицу, он будет освобождать предыдущие объекты ячейки, и когда вы снова прокрутите список, они будут повторно создаваться с помощью 'tableView: cellForRowAtIndexPath:'. Таким образом, это может означать, что он запрашивает высоту ячейки, даже если эта ячейка в настоящее время еще не выделена/не инициализирована (например, если вы находитесь внизу в таблице). Я хочу, чтобы был способ чтения фактических свойств/конфигурации ячейки при вычислении высоты. – Sim

+0

Проблема в том, как вы диагностируете; по существу, таблица хочет иметь возможность отображать ячейку 8000 без необходимости хранить ячейки 0-7999 в памяти и знать, насколько она находится вниз по списку. Это не плохой дизайн API, это особенно необходимо для ограничений. Если у вас есть, скажем, восемь типов ячеек, вы можете загружать NIB один раз во время init, где-то хранить высоты, а затем использовать любую логику, которую вы используете, для определения типа ячейки из индекса, чтобы получить соответствующее значение для tableView: heightForRowAtIndexPath :. – Tommy

ответ

0

Итак, вы хотите получить выбранную ячейку?

Затем написать:

UITableViewCell *actCell = [self.tableView cellForRowAtIndexPath: 
              [self.tableView indexPathForSelectedRow]]; 
Смежные вопросы