У меня есть пользовательский UIView, который является под-представлением UITableViewCell. Когда ячейка рисуется, так же как и мой пользовательский вид, правильно вызывая drawRect: в моем подклассе UIView. Когда ячейка перезагружается, представление рисуется правильно (вызывается drawRect:
).Почему мой подкласс UIView не перерисовывается после вызова setNeedsDisplay?
Когда происходит определенное событие (например, таймер), я хочу перерисовать вид, не перезагружая всю ячейку. (Это не единственный вид в ячейке.)
Однако, когда я вызываю setNeedsDisplay
на мой под-просмотр, ничего не происходит.
Я предполагаю, что когда называется мой взгляд-х drawRect:
, полученное изображение кэшируется в каркасном где-то такие, что, когда я называю setNeedsDisplay
, что поддержка перерисовывается на экран, но мой drawRect:
вызова никогда не вызываются.
Почему drawRect:
никогда не звонил снова после создания ячейки?
РЕДАКТ. Подземелья соты создаются из наконечника. т.е.: UIViewController загружается из nib, и его представление добавляется в UITableViewCell.
Я сделал тестовый чехол с нуля с пользовательским представлением, которое не загружается из наконечника (созданного кодом), и оно работает как ожидалось: setNeedsDisplay
приводит к вызову drawRect:
. Это должно быть что-то, что либо установлено в файле .xib, либо что-то, что происходит по-разному с представлением, когда оно загружается из наконечника.
Вы называете setNeedsDisplay из основного потока? Вы уверены, что отправляете его в правильное представление (то есть должно быть хорошо, если оно сделано из ячейки, но может быть легко сделано неправильно, когда сделано * где-то *, и ячейка была заменена (т.е. прокруткой). – Eiko
Да, нам нужно еще один код – vodkhang
Да, setNeedsDisplay вызывается из основного потока.Я даже пытался отложить его, используя performSelectorOnMainThread: ... нет радости. См. редактирование о представлении, поступающем из файла nib (.xib). –