关于 UIView 的 setNeedsDisplay 的困惑
我有一个 UITableView* myTableView 的 ivar。我有从互联网加载的数据,所以当数据加载时我应该调用 [myTableView setNeedsDisplay],我知道我可以/应该调用 [myTableView reloadData] 但令人困惑的是调用 setNeedsDisplay 也应该工作但不起作用。
我只是在寻找 setNeedsDisplay 的作用的解释?在 UITableView 实例上调用时。
根据文档 setNeedsDisplay 在“下一个绘图周期”中调用drawRect。谁能告诉我下一个绘图周期是什么?
I have an ivar of UITableView* myTableView. I have data being loaded from internet so when the data gets loaded should i call [myTableView setNeedsDisplay], i know i can/should call [myTableView reloadData] but the confusion is that calling setNeedsDisplay should also work but is not working.
I am just looking for an explanation as to what setNeedsDisplay does? when called on UITableView instance.
As per the documentation setNeedsDisplay calls drawRect in "next drawing cycle". so can anyone tell me what is the next drawing cycle.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
setNeedsDisplay方法与tableView的重新加载无关。它只是重绘tableView的
视图
,而不是它的单元格或分隔符。setNeedsDisplay 和 reloadData 完全用于不同的目的。
setNeedsDisplay method has nothing to do with the reloading of the tableView. It just redraws the
view
of the tableView, not its cells or separators.setNeedsDisplay and reloadData are entirely for different purposes.
setNeedsDisplay
将调用UIView
标记为需要重绘是纯粹的视觉感觉,正如所述,这将在下一个绘制周期发生。这与在
UITableView
上下文中使用时重新加载数据完全不同。有关该主题的更多信息,请参阅本文。
setNeedsDisplay
marks the callingUIView
as needing to be redrawn is a purely visual sense, which as stated will happen on the next drawing cycle.This is completely different to reloading the data when used in a
UITableView
context.See this article for a little more information on the subject.
SetNeedsDisplay
一个很好的例子是当 UIImageView 使用一张图像渲染时;当它仍在屏幕上时,您可以将图像更改为其他内容。在这种情况下,仅更改图像并不总是会触发视图的重新绘制,为此您需要调用
setNeedsDisplay
。reloadData
当 tableview 的底层数据源发生更改并且您希望将其反映在 UI 中时,必须调用它。在这种情况下,请调用此
reloadData< /代码> 方法
SetNeedsDisplay
A good example of this is when a UIImageView is rendered with one image; and while it is still on screen, you change the image to something else. In this case, just changing the image will not always trigger a repaint of the view, for that to occur you need to make a call to
setNeedsDisplay
.reloadData
It has to be called when the underlying data source for the tableview is changed and you want that to be refelected in UI.In that case call this
reloadData
mehod一般来说,您只需要在已实现drawRect的自定义视图上调用setNeedsDisplay即可。
Generally, you only need to call setNeedsDisplay on custom views for which you have implemented drawRect.
我的解决方案是更新所有可见单元格并使用 reloadRowsAtIndexPaths 跟踪我的自定义类“ProductTableViewCell”中单元格的索引路径,请参见下文:
以下是该类的定义方式:
My solution was to update all visible cells and keep track of indexPath of cell in my custom class "ProductTableViewCell" with reloadRowsAtIndexPaths, see below:
Here is how the class is defined: