objective-c - NSComboBox 以不同颜色显示重复项目

标签 objective-c macos cocoa

我有一个包含 5 列的 NSTableView。其中一列具有 NSComboBoxCell。组合框填充了目录中一种类型的文件名称(例如 jpg)。我将文件名按字母顺序保存在 NSArray 中。我使用文件名数组填充组合框单元格,如下所示:

[assayCell addItemsWithObjectValues:(NSArray *)fileNameArray];

以前只有一种类型的文件,但现在同一目录有多种类型的同名文件,例如。 image1.jpg 和 image1.png。我想在组合框中填充不带扩展名的文件名。具有不同扩展名的文件将以不同的颜色显示,例如。 jpg 文件将为黑色,png 文件将为绿色。

我对 cocoa/Obj-C 比较陌生,所以我没有找到实现这一目标的正确方法。如何在数组中保留重复的项?我应该使用 NSDictionary 来存储文件名及其扩展名,然后创建字典数组吗?在这种情况下,我将如何对数组进行排序?

请提出解决方案...

问候 阿比 git

最佳答案

确定要使用的颜色取决于您存储文件扩展名的方式。如果它们是文件名的一部分(即“image1.jpg”),则必须将它们分开。如果它们已经是分开的(即像你提到的,在有两个 kvps 的字典中)那么我想你很好。

应用颜色可以使用 NSAttributedString 来实现:

NSMutableAttributedString *astr = [[NSMutableAttributedString alloc] initWithString:@"Hello!"];
    [astr addAttribute:NSForegroundColorAttributeName
                 value:[NSColor redColor]
                 range:NSMakeRange(0, astr.length)];
    [assayCell addItemWithObjectValue:astr];

关于objective-c - NSComboBox 以不同颜色显示重复项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21773486/

相关文章:

ios - 使用 -v 查看调用?

c++ - libcurl、OSX、curl_multi_perform 访问错误

CGWindowListCreateImage 创建每像素 4 字节的图像。如何将其更改为每像素 3 个字节?

iphone - 从文件读取数据时出现“NSRangeException”

ios - 如何旋转类似于照片应用程序的 UICollectionView 并保持当前 View 居中?

iphone - 如何在iphone 的iCarousel 上设置CustomFrame?

objective-c - 我们不应该再@synthesize了吗?

c++ - Boost 1.69 中的某些库是否与 MacOS 不兼容?

macos - 用于磁盘空间使用明细的 Cocoa API

macos - 仅增加窗口高度直到到达 Dock