NSTableView 列中 NSImageView 上的可可绑定不会自动更新

发布于 2024-12-08 16:30:03 字数 272 浏览 0 评论 0原文

在我的可可应用程序中,有一个 NSTableView(10.7 lion view based tableview)仅包含一列,其中的单元格是自定义 NSTableCellView,其中有多个视图,其中之一是 NSImageView。

我的数据模型有一个整数状态变量,我使用 cocoa 绑定和 NSValueTransformer 为该 NSImageView 提供不同的 NSImage。

问题是,图像不会自动更新。状态更改后,图像仅反映重新加载列表后的更改。

感谢您的帮助:)

In my cocoa app there is a NSTableView(10.7 lion view based tableview) only contains one column, the cell in it is a custom NSTableCellView, in it there are several views and one of them is a NSImageView.

My data model has an integer status variable, I use cocoa binding and a NSValueTransformer to give different NSImage to this NSImageView.

The problem is, the image is not updated automatically. After the status is changed, the image only reflects the change after reload the list.

Thanks for any help :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

ぽ尐不点ル 2024-12-15 16:30:03

最后我解决了我自己的问题。

我为模型的“状态”整数属性添加了观察者。当这个状态改变时,实际的表格单元格的图标(NSImageView)已经根据可可绑定而改变,但没有更新。然后在观察回调方法中,只需添加

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
Model *m = (Model*)context;
NSInteger idx = [self.modelArray indexOfObject:m];
NSTableRowView *row = [self.tableView rowViewAtRow:idx makeIfNecessary:NO];
ListCellItem *cell = [row viewAtColumn:0];
cell.icon.needsDisplay = YES;
[cell.icon.image recache];
[cell.icon display];
}

然后,一旦状态发生变化,图像就会更新。

Finally I solved my own question.

I added observer for model's "status" integer property. When this status changed, the actual table cell's icon (NSImageView) has changed according to the cocoa binding but not updated. Then in the observe callback method, just add

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
Model *m = (Model*)context;
NSInteger idx = [self.modelArray indexOfObject:m];
NSTableRowView *row = [self.tableView rowViewAtRow:idx makeIfNecessary:NO];
ListCellItem *cell = [row viewAtColumn:0];
cell.icon.needsDisplay = YES;
[cell.icon.image recache];
[cell.icon display];
}

Then the image get updated as soon as status get changed.

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