UITableView Действительно Загружался (Сделанный рисунок ячейки)

Вопрос

Как можно обнаружить, когда Табличное представление сделано, таща ячейки?

Проблема

Я получил две маркировки в contentView UITableViewCell. Размер этих маркировок является динамичным. Я смог сделать так путем разделения на подклассы UITableViewCell, в drawRect методе я корректирую кадры двух маркировок в зависимости от их содержания. Теперь я хочу выровнять все вторые маркировки.

Мои мысли на шагах

  1. Определите содержание в табличном представлении и позвольте ему загрузиться автоматически.
  2. Пробегите ячейки табличного представления и определите x положение второй маркировки в UITableViewCell, который является furtherest далеко.
  3. Сохраните это x положение и когда любая ячейка оттянута, используют это x положение для размещения второй маркировки.

Проблема - это, если я использую следующий код:

for (int row = 0; row < [self.tableView numberOfRowsInSection:section]; row++) {
    UITableViewCustomCell *cell = (UITableViewCustomCell *)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:0]];
    NSLog ([cell.labelTwo description]);        
}

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

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

Что я хочу...

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

У кого-либо есть решение?

Заранее спасибо,

Mark

6
задан Mark 26 January 2010 в 14:34
поделиться

3 ответа

Попробуйте позвонить SizeWithFont: на содержимом этих меток, чтобы получить максимальную ширину, прежде чем делать что-либо. Вы должны быть в состоянии использовать его позже в вашем CellForeatindexPath: , чтобы настроить ширину, сколько вам нужно.

Я бы порекомендовал вам пересмотреть с использованием uableViewCellStylevalue2 ячеек и попытка настроить TextLabel и DetailTextLabel. У меня была похожая ситуация, а это , как я это сделал.

2
ответ дан 17 December 2019 в 18:16
поделиться

Я думаю, что вам нужно сделать, это сделать для Добавить ViewController к иметь UiableViewController контролировать сам UiableViewCell, чтобы вы могли записать события нагрузки на этикетки. ViewController будет иметь ссылки на оба ярлыка, поэтому он может соответственно настроить их в ответ на -ViewDiDiDAppear .

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

0
ответ дан 17 December 2019 в 18:16
поделиться

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

Но если вам нужно решение: используйте метод sizeWithFont: или один из его родственников (см. Документацию Xcode). В частности, прокрутите значения, которые войдут в первые метки, примените к каждому sizeWithFont и отслеживайте наибольшую ширину, которую вы видите. (Я предполагаю, что у вас есть доступ к значениям до того, как они попадут в ячейки; поскольку они динамические, они должны проходить через контроллер табличного представления, не так ли?)

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

1
ответ дан 17 December 2019 в 18:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: