我创建了NSTableView
,并设置了所有绑定(通过NSArrayController
)。我希望其中一列有NSPopUpButtonCell
,但是,我希望它显示图像,而不是显示文字 - 因此用户可以更改popup control
中的图像。
我的列被绑定(使用SelectedObject
绑定)到正确的属性,并且NSPopUpButtonCell
被绑定(使用ContentValues
绑定)到我的完整图像列表(其中来自另一个包含图像名称数组的NSArrayController
- NSStrings。
我创建了一个NSValueTransformer
来将图像名称(NSString)转换为NSImage,并通过创建一个带有NSImageCell
的添加列来测试它,并正确显示图像。
有办法做到这一点吗?
我希望我可以在NSPopUpButtonCell
的{{1}}属性上定位绑定,而不是image
属性。
编辑:我曾尝试使用带有嵌入式图像的title
。但问题仍然存在,因为我希望绑定使用NSAttributedString
,而不是setAttributedTitle
。
答案 0 :(得分:0)
经过大量的反复试验,我成功地解决了这个问题。我确信仍然存在更强大的正确解决方案,但是,现在,这样做了。
我的解决方案:
@interface RSMenu : NSMenu
insertItemWithTitle
,并根据自己的需要进行自定义。例如:
-(NSMenuItem *)insertItemWithTitle:(NSString *)aString
action:(SEL)aSelector
keyEquivalent:(NSString *)charCode
atIndex:(NSInteger)index {
NSImage *image = [NSImage imageNamed:aString];
NSMenuItem* menuItem = [super insertItemWithTitle:image ? @"" : aString
action:aSelector
keyEquivalent:charCode atIndex:index];
if ( nil != image ) {
[menuItem setImage:image];
}
return menuItem;
}
结果如下:
希望这有助于其他人。