2014-02-14 70 views
0

显示重复的项目我有5列的NSTableView的。其中一列有NSComboBoxCell。组合框用来自目录的一种类型的文件(例如jpg)的名称填充。我按字母顺序将文件名保存在NSArray中。我填充文件名的阵列组合框单元如下:NSComboBox到不同的颜色

[assayCell addItemsWithObjectValues:(NSArray *)fileNameArray]; 

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

我是比较新的可可/ OBJ - C的,所以我没有找到一个合适的方式来实现这一目标。如何保持数组中的重复项?我应该使用NSDictionary存储文件的名称及其扩展名,然后制作字典数组。在那种情况下,我将如何对阵列进行排序?

请提出一个解决办法...

问候 Abhijeet

+1

使用的NSMutableArray。 –

+0

谢谢!唯一值得怀疑的是,我可以用与排序NSString数组相同的方式对NSDictionary数组进行排序。我排序NSString的为一体的阵列:NSArray的* sortedArray = [assayNameList sortedArrayUsingSelector:@selector(比较:)]; – Abhijeet

回答

1

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

应用可以使用NSAttributedString实现的颜色:的NSMutableDictionary或等效的

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

谢谢!唯一的问题是因为文件名没有扩展名,所以在组合框项目选择时我该如何识别文件的类型。我应该检索所选项目的颜色并使用它来标识文件的类型?可能吗? – Abhijeet

+1

那么在理论上,你可以这样做,但它可能会变成杂乱,如果您稍后决定更改配色方案,你将不得不更改文件类型识别码等也容易出错,即...我建议始终保持一个文件名和相应的扩展名列表,并在其上绘制UI列表。 – insys

+0

请确保你接受一个答案,如果它对你有帮助。通过这种方式,它不会显示为未答复,并且您将增加获得未来回答问题的机会。 – insys