kar*_*man 10 iphone cocoa-touch
我在自定义表格单元格中有自定义视图.每次更改自定义视图上的特定属性时,我都会调用[self setNeedsDisplay]该视图重绘视图- (void)drawRect:(CGRect)rect.该属性在表视图委托中设置tableView:cellForRowAtIndexPath:.但是当表格视图大于屏幕并且必须重复使用单元格时,drawRect每次都不会调用setNeedsDisplay.特别是当我快速拨动桌子时.慢滚动工作正常.这导致第一个和最后一个单元格中的信息通常不正确.
在日志中我可以看到,通常情况下,每次调用setNeedsDisplay有一个电话drawRect,但是当我滚动表视图很快有更多的呼吁setNeedsDisplay比drawRect.当然,这里应该有一对一的比例.
我在普通的UIView中使用相同的自定义视图,并且每次调用时它都会完美地重绘setNeedsDisplay.问题似乎与表视图和重用单元格隔离.
有谁知道这里发生了什么?有没有其他方法可以强制自定义视图重绘自己?
kar*_*man 13
在我发现问题之前,我认为我在这个问题上挣扎了近一个星期.在这里,我没有欺骗你:
指向此自定义视图的指针是在.m文件而不是.h文件中定义的,使其成为类变量而不是实例变量.
是的,我非常,非常尴尬.
setNeedsDisplay只有drawRect:在视图可见时才会调用,否则会使视图的图层无效,并在视图drawRect:可见时调用.
滚动表格视图时,表格视图将请求单元格,希望将它们添加到视图中.如果滚动得足够快,一些单元格将花费很长时间来准备,并且当它们准备好时,它们应该定位的位置是在屏幕外.在这些情况下,表视图会丢弃它们,而不是将它们添加到滚动视图中(因此drawRect:不会被调用)
| 归档时间: |
|
| 查看次数: |
19823 次 |
| 最近记录: |