Перезагрузка раздела TableView на NSTimer - PullRequest
2 голосов
/ 03 апреля 2012

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

Пожалуйста, помогите мне :) Заранее спасибо

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Причина, по которой вы не можете нажать кнопку, заключается в том, что вы постоянно перезагружаете tableView, поэтому кнопка переинициализируется, пока вы ее нажимаете.

Есть два решения (одно лучше для вас, но не видяваш код, я не могу сказать, какой).

Решение A: Вместо вызова reloadData для табличного представления обновляйте только метки в ячейках.

Решение B: Повторно используйте ваши UITableViewCells и только инициализируйте кнопкупри необходимости не для каждой reloadData.

0 голосов
/ 04 апреля 2012

Сделайте шаг назад и подумайте о том, что вы пытаетесь сделать здесь:

У вас есть UITableView с одной ячейкой, которая должна обновляться с частотой 20 Гц.

Двадцать. Герц.

Что происходит, когда вы reloadSections:withRowAnimation:

  1. TableView запрашивает у своего источника данных количество строк в этом разделе.
  2. TableView должен спросить своего делегата, реализует ли он tableView:heightForRowAtIndexPath: - если это так, ему нужно вызвать этот метод.
  3. TableView запрашивает у своего источника данных ячейку, которая затем попытается удалить ее из очереди (то есть, если был идентификатор повторного использования ...) и сконфигурировать эту ячейку.
  4. Затем TableView возьмет эту ячейку и вставит ее в иерархию представлений, удалит старую и затем вызовет компоновку своих подпредставлений.

Двадцать. Колоссальные. Времена. А. Второй.

Не делай этого!

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

...