关于 UIView 的 setNeedsDisplay 的困惑

发布于 2024-12-01 13:58:39 字数 302 浏览 1 评论 0原文

我有一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

花落人断肠 2024-12-08 13:58:39

setNeedsDisplay方法与tableView的重新加载无关。它只是重绘tableView视图,而不是它的单元格分隔符

setNeedsDisplayreloadData 完全用于不同的目的。

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.

一抹苦笑 2024-12-08 13:58:39

setNeedsDisplay 将调用 UIView 标记为需要重绘是纯粹的视觉感觉,正如所述,这将在下一个绘制周期发生。

这与在 UITableView 上下文中使用时重新加载数据完全不同。

有关该主题的更多信息,请参阅本文

setNeedsDisplay marks the calling UIView 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.

深海里的那抹蓝 2024-12-08 13:58:39

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

倾其所爱 2024-12-08 13:58:39

一般来说,您只需要在已实现drawRect的自定义视图上调用setNeedsDisplay即可。

Generally, you only need to call setNeedsDisplay on custom views for which you have implemented drawRect.

冷弦 2024-12-08 13:58:39

我的解决方案是更新所有可见单元格并使用 reloadRowsAtIndexPaths 跟踪我的自定义类“ProductTableViewCell”中单元格的索引路径,请参见下文:

NSArray *arrayCells = [self.tableView visibleCells];
NSMutableArray *mArrayIndexPaths = [[NSMutableArray alloc] init];
for(ProductTableViewCell *cell in arrayCells) {
    [mArrayIndexPaths addObject:cell.indexPath];
}

[self.tableView beginUpdates];
[self.tableView endUpdates];
[self.tableView reloadRowsAtIndexPaths:[mArrayIndexPaths copy] withRowAnimation:UITableViewRowAnimationAutomatic];

以下是该类的定义方式:

@interface ProductTableViewCell : UITableViewCell {
    NSString *reuseID;
}

@property (nonatomic, strong) NSIndexPath *indexPath;

My solution was to update all visible cells and keep track of indexPath of cell in my custom class "ProductTableViewCell" with reloadRowsAtIndexPaths, see below:

NSArray *arrayCells = [self.tableView visibleCells];
NSMutableArray *mArrayIndexPaths = [[NSMutableArray alloc] init];
for(ProductTableViewCell *cell in arrayCells) {
    [mArrayIndexPaths addObject:cell.indexPath];
}

[self.tableView beginUpdates];
[self.tableView endUpdates];
[self.tableView reloadRowsAtIndexPaths:[mArrayIndexPaths copy] withRowAnimation:UITableViewRowAnimationAutomatic];

Here is how the class is defined:

@interface ProductTableViewCell : UITableViewCell {
    NSString *reuseID;
}

@property (nonatomic, strong) NSIndexPath *indexPath;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文