NSTableView 更改行的文本颜色

发布于 2024-10-13 14:12:00 字数 1841 浏览 3 评论 0原文

我需要更改 NSTable 视图的以下属性 1 -- 更改颜色:选择行颜色和文本颜色 2 -- 更改文本颜色,对于每一行,它取决于一些输入参数,

为了更改每行的文本颜色,我应该重写委托方法 willDisplayCell,这就是我所做的,到目前为止,

-- 创建表格 --- -

pMyTableView       = [[[CustomTableView alloc] initWithFrame:clipViewBounds] autorelease];


NSTableColumn*  firstColumn     = [[[NSTableColumn alloc] initWithIdentifier:@"firstColumn"] autorelease];

[firstColumn setWidth:35];

[pMyTableView  addTableColumn:firstColumn];

NSTableColumn*  secondColumn        = [[[NSTableColumn alloc] initWithIdentifier:@"secondColumn"] autorelease];

[secondColumn setWidth:180];

[pMyTableView  addTableColumn:secondColumn];
    [pMyTableView setRowHeight:30];

    [self SetContactTableDisplayAttribute];

[pMyTableView setDataSource:self];
[scrollView setDocumentView:pOnLineCTView];

    [pMyTableView setDelegate:self]

;

--- 其他委托方法 -------------

- (id) tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex{
    if([pColName isEqualToString:@"secondColumn"]) 
    {
           // Here there is some logic , to get the proper string that i wanted to display
        return @"tempString";

    }

}

---- 现在这就是我设置文本颜色的方式 ---

- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex {

    NSString *colName = [aTableColumn identifier];
    if([colName isEqualToString:@"secondColumn"]){
        NSTextFieldCell *pCell = aCell;
        [pCell setTextColor:[NSColor blueColor]];
    }

}

使用上面的代码,它会在日志中出现异常,我可以看到这条线 -[NSCell setTextColor:]:发送到实例的无法识别的选择器 看起来我需要在某个地方设置文本字段单元格,但我不知道如何以及在哪里设置, 请帮助我,

另一件事是,最初我不需要单元格的任何背景,但是一旦选择单元格,那么我可能还需要更改背景,或者你可以说突出显示颜色,我也可以在 WillDIsplayCell 中得到相同的颜色吗

I need to change following properties for my NSTable View
1 -- Change Color:Row Color and Text Color when its selected
2 -- Change the Text Color , for each row it depends upon some input parameter,

For changing textcolor for each row, i should override delegate method willDisplayCell, This is what i have done , till now,

-- Creating the table ----

pMyTableView       = [[[CustomTableView alloc] initWithFrame:clipViewBounds] autorelease];


NSTableColumn*  firstColumn     = [[[NSTableColumn alloc] initWithIdentifier:@"firstColumn"] autorelease];

[firstColumn setWidth:35];

[pMyTableView  addTableColumn:firstColumn];

NSTableColumn*  secondColumn        = [[[NSTableColumn alloc] initWithIdentifier:@"secondColumn"] autorelease];

[secondColumn setWidth:180];

[pMyTableView  addTableColumn:secondColumn];
    [pMyTableView setRowHeight:30];

    [self SetContactTableDisplayAttribute];

[pMyTableView setDataSource:self];
[scrollView setDocumentView:pOnLineCTView];

    [pMyTableView setDelegate:self]

;

--- Other delegate Method -------------

- (id) tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex{
    if([pColName isEqualToString:@"secondColumn"]) 
    {
           // Here there is some logic , to get the proper string that i wanted to display
        return @"tempString";

    }

}

---- Now this is how i am setting the text color ---

- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex {

    NSString *colName = [aTableColumn identifier];
    if([colName isEqualToString:@"secondColumn"]){
        NSTextFieldCell *pCell = aCell;
        [pCell setTextColor:[NSColor blueColor]];
    }

}

With the above code, its going to exception in the Log, i could see the line
-[NSCell setTextColor:]: unrecognized selector sent to instance
Looks like somewhere i need to set the text Field cell, but how and where i have no idea,
kindly help me,

Another thing is, Initially i don't need any background for cell, but once when cell is selected , then also i might need to change the Background or you can say highlight color, can i get the same in WillDIsplayCell too

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

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

发布评论

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

评论(1

烟织青萝梦 2024-10-20 14:12:00

我已经有一段时间没有这样做了,但当我需要这样做时,我总是参考 Corbin Dunn 的这篇博客文章:Cocoa:NSTableView、[NSCell setTextColor] 和“源列表”的 willDisplayCell 委托方法

顺便说一句,Corbin 在 Apple 工作,据我了解,他负责 NSTableView。当他在博客上写任何有关 Cocoa 的内容时,我总是确保将其添加为书签。

It has been a while since I have done this but I always refer to this blog post by Corbin Dunn when I need to do it: Cocoa: willDisplayCell delegate method of NSTableView, [NSCell setTextColor], and “source lists”

By the way, Corbin works at Apple and from what I understand is responsible for NSTableView. When he blogs about anything Cocoa I always be sure to bookmark it.

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