NSCell 中的 NSView

发布于 2024-11-08 16:55:21 字数 917 浏览 0 评论 0原文

我已经阅读了很多有关此内容的内容,但我无法让它工作,我有一个带有此代码的自定义 NSCell

#import "ServiceTableCell.h"
@implementation ServiceTableCell

-(void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    NSLog(@"I'm being called");
    NSView *newview = [[NSView alloc] initWithFrame:cellFrame];
    NSImage *image = [NSImage imageNamed:@"bg.png"];
    NSRect imagesize;
    NSImageView *IMV = [[NSImageView alloc] initWithFrame:imagesize];
    [IMV setImage:image];
    [newview addSubview:IMV];
    [controlView addSubview:newview];
}

这是我的 NSTableView 数据源:

- (long)numberOfRowsInTableView:(NSTableView *)tableView {
    return 3;
}

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(long)row
{
    return [[ServiceTableCell alloc] initTextCell:@"dd"];
}

据我所知,drawwithframe... 在单元格初始化时被调用,但是它永远不会被调用,那么,我错过了什么?

I've read a lot about this but i can't get it to work, i have a custom NSCell with this code

#import "ServiceTableCell.h"
@implementation ServiceTableCell

-(void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    NSLog(@"I'm being called");
    NSView *newview = [[NSView alloc] initWithFrame:cellFrame];
    NSImage *image = [NSImage imageNamed:@"bg.png"];
    NSRect imagesize;
    NSImageView *IMV = [[NSImageView alloc] initWithFrame:imagesize];
    [IMV setImage:image];
    [newview addSubview:IMV];
    [controlView addSubview:newview];
}

And this my NSTableView data source:

- (long)numberOfRowsInTableView:(NSTableView *)tableView {
    return 3;
}

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(long)row
{
    return [[ServiceTableCell alloc] initTextCell:@"dd"];
}

As i understand, the drawwithframe... gets called when the cell is initialized but it never gets called, so, what am I missing?

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

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

发布评论

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

评论(2

离不开的别离 2024-11-15 16:55:21

方法 tableView:objectValueForTableColumn:row: 应该返回一个对象值,而不是一个单元格。

请注意,NSTableView 与您可能熟悉的 UITableView 有很大不同。例如,数据源不返回填充了数据的单元格,而是返回数据。 NSTableView 中的单元格类型是按列设置的,在一列中不能有不同类型的单元格(好吧,从技术上讲,这并不完全正确,您可以通过 -[NSTableColumn dataCellForRow:] 拥有不同的单元格)。

The method tableView:objectValueForTableColumn:row: should return an object value, not a cell.

Note that NSTableView is substantially different from UITableView, which you may be familiar with. For example, the data source doesn't return cells that are filled with the data, but returns the data. And the cell type in an NSTableView is set per column, you can't have a different kinds of cells in one column (well, technically, that's not entirely true, you could have different cells through -[NSTableColumn dataCellForRow:]).

人事已非 2024-11-15 16:55:21

因此,感谢 @puzzle 的回答和更多的挖掘,答案是将我的 NSCell 子类设置为 InterfaceBuilder 中的主单元格,然后调用该方法,正如他所说,在 tableView:objectValueForTableColumn:row: 我需要返回数据然后绘制它。

So thanks to @puzzle answer and a little more digging the answer was to set my subclass of NSCell as the main cell in the InterfaceBuilder, then the method was being called, and as he said, in tableView:objectValueForTableColumn:row: i needed to return the data to then draw it.

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