【问题标题】:NSComboBox to display duplicate items in different colorsNSComboBox 以不同颜色显示重复项
【发布时间】:2014-03-13 11:13:06
【问题描述】:

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

[assayCell addItemsWithObjectValues:(NSArray *)fileNameArray];

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

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

请提出解决方案...

问候 阿比吉特

【问题讨论】:

  • 使用 NSMutableDictionary 或等效的 NSMutableArray。
  • 谢谢!唯一的疑问是我是否可以像排序 NSStrings 数组一样对 NSDictionary 数组进行排序。我将 NSStrings 数组排序为: NSArray *sortedArray = [assayNameList sortedArrayUsingSelector:@selector(compare:)];

标签: objective-c macos cocoa


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!唯一的问题是因为文件名没有扩展名,所以在选择组合框项目时如何识别文件的类型。我应该检索所选项目的颜色并使用它来识别文件类型吗?有可能吗?
  • 理论上你可以这样做,但它可能会变得混乱而且容易出错,即如果你以后决定更改配色方案,你将不得不更改文件类型识别码等...我建议始终维护文件名和相应扩展名的列表,并在此基础上绘制 UI 列表。
  • 如果对您有帮助,请确保您接受答案。这样,它就不会显示为未回答,并且您将增加获得您发布的未来问题回答的机会。
  • 答案分数下方有一个微弱的勾号。您可以单击它来接受答案。看看here
  • @Abhijeet 我鼓励你在一个新问题中提出这个问题,因为它涉及一个单独的主题。
猜你喜欢
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 2017-12-22
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多