Почему мой подкласс UIView не перерисовывается после вызова setNeedsDisplay?

У меня есть собственный UIView, который является подвидом UITableViewCell. Когда отрисовывается ячейка, то же самое и в моем пользовательском представлении, правильно вызывающем drawRect: в моем подклассе UIView. Когда ячейка перезагружается, вид отображается правильно (вызывается drawRect:).

Когда происходит определенное событие (например, таймер), я хочу перерисовать представление, не перезагружая всю ячейку. (Это не единственный вид в камере.)

Однако, когда я вызываю setNeedsDisplay в моем подвиде, ничего не происходит.

Я предполагаю, что когда вызывается drawRect: моего представления, результирующее изображение кэшируется где-то в резервной копии, так что когда я вызываю setNeedsDisplay, эта поддержка перерисовывается на экране, но мой вызов drawRect: никогда не вызывается снова.

Почему drawRect: больше никогда не вызывается после создания ячейки?

РЕДАКТИРОВАТЬ: subviews ячейки создаются из пера. то есть: UIViewController загружается из пера, и его представление добавляется в UITableViewCell.

Я сделал тестовый пример с нуля с настраиваемым представлением, которое не загружается из пера (созданного кодом), и оно работает, как ожидалось: setNeedsDisplay приводит к вызову drawRect:. Это должно быть что-то, что либо настроено в файле .xib, либо что-то, что происходит иначе с представлением, когда оно загружается из пера.


person Matt Connolly    schedule 09.01.2011    source источник
comment
Вы вызываете setNeedsDisplay из основного потока? Вы уверены, что отправляете его в правильное представление (т.е. должно быть нормально, если это делается из ячейки, но может быть легко ошибиться, если это сделано где-то и ячейка была заменена (например, путем прокрутки).   -  person Eiko    schedule 09.01.2011
comment
Да, setNeedsDisplay вызывается из основного потока. Я даже пробовал отложить это с помощью performSelectorOnMainThread: ... без радости. См. Правку о представлении, исходящем из файла пера (.xib).   -  person Matt Connolly    schedule 09.01.2011
comment
Вы когда-нибудь находили решение для этого?   -  person Maggie    schedule 06.07.2012
comment
Я так и не нашел причину. Я изменил свой код, чтобы создать представление программно, а не получать его из файла nib / xib, и с тех пор не возвращался к этой проблеме.   -  person Matt Connolly    schedule 09.07.2012


Ответы (1)


Я сам столкнулся с той же проблемой. Для меня это была проблема с моим XIB - хотя я делаю подкласс UIView - поэтому адаптируйтесь соответственно. Моя ошибка в IB заключалась в том, что я прикреплял свои элементы управления к «владельцу файла» вместо того, чтобы прикреплять их к UIView. Я уверен, что из-за моей неопытности происходит нечто большее - возможно, кто-то с немного большим опытом сможет уточнить.

Надеюсь, это поможет!

person capikaw    schedule 13.05.2011