Как сделать расчеты только для видимых ячеек в iPhone? - PullRequest
0 голосов
/ 07 октября 2010

У меня так много ячеек в табличном представлении, скажем, около 500. У каждой ячейки есть свои изображения и строковые абзацы. На самом деле я рисую эти изображения и строки с помощью метода drawRect из UIView. Поэтому мне нужно рассчитать изображение и положение каждой строки (включая их ширину и высоту, чтобы измерить высоту ячейки и области обтекания). Если я делал расчеты за один раз для всех ячеек, это занимает некоторое время .. Это не хорошо. Я хочу показать клетки быстро. Поэтому я хочу делать вычисления только для видимых ячеек и хочу немедленно показать видимые ячейки. Тогда расчет для других ячеек должен произойти в фоновом режиме. Еще одна вещь, я буду делать вычисления только один раз для каждой ячейки. Как только я это сделаю, я буду хранить значения в массиве. В следующий раз я просто покажу вещи по значениям массива, а не по расчетам.

Пожалуйста, кто-нибудь, помогите мне сделать это ... Я просто хочу знать, возможно ли это? если да, то как это сделать?

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

Ответы [ 3 ]

2 голосов
/ 07 октября 2010

Для этого нет «процедуры».UITableView всегда ведет себя так.Вы предоставляете обратные вызовы, чтобы сообщить, сколько существует секций и строк на секцию, и как заполнить каждую ячейку.UITableView попросит вас заполнить только видимые ячейки и даже перезапустит ячейки, когда они прокрутятся от края (в отличие от простого их создания до бесконечности).

0 голосов
/ 07 октября 2010

Я думаю, вы могли бы использовать свойство visibleCells UITableView.

UITableView *tableView;
NSArray *cells = tableView.visibleCells;
0 голосов
/ 07 октября 2010

Вы можете получить видимые ячейки в UITableViewController через

[self.tableView indexPathsForVisibleRows]

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

for (NSIndexPath *path in paths ) {
// do some processing in [self.tableView cellForRowAtIndexPath:path]
}

Я сделал одно и то же пользовательское представление для 1000+ строк с настраиваемым рисованием для каждой ячейки и использовал описанный выше метод для оптимизации загрузки ячеек. Моя обработка происходит только во время ff:

  1. При загрузке (viewDidLoad) обновите видимые ячейки.

  2. Когда пользователь прекращает прокрутку (по умолчанию при прокрутке используется пустое место)

...