Zap*_*Zap 6 macos cocoa objective-c nstokenfield nstokenfieldcell
我对cocoa很陌生,我正试图找出如何在Mavericks中创建类似于新标记UI的东西:

我假设,我将不得不覆盖NSTokenFieldCell以获得彩色圆点或标签上的图标.但是这个弹出列表如何工作?
谢谢你的帮助!
可悲的是,你必须自己动手。几乎所有进行的绘画NSTokenFieldCell都是私人的,因此添加任何类型的装饰元素都必须由您来完成。如果我没记错的话,NSTokenFieldCell使用的是NSTokenTextView而不是窗口的标准字段编辑器。我不确定它有什么不同,但我认为它主要是为了处理“标记化”属性字符串的特殊性质。我认为他们只是使用NSAttachmentCell图形标记的对象,当单元格接收到-mouseDown:事件时,他们会显示菜单。
菜单部分实际上非常简单,因为您可以将图像添加到菜单项,如下所示:
NSMenuItem *redItem = [[NSMenuItem alloc] initWithTitle:@"Red"
action:@selector(chooseColorMenuItem:)
keyEquivalent:@""];
// You could add an image from your app's Resources folder:
NSImage *redSwatchImage = [NSImage imageNamed:@"red-menu-item-swatch"];
// ----- or -----
// You could dynamically draw a color swatch and use that as its image:
NSImage *redSwatchImage = [NSImage imageWithSize:NSMakeSize(16.0, 16.0)
flipped:NO
drawingHandler:^BOOL(NSRect dstRect) {
NSRect pathRect = NSInsetRect(dstRect, 0.5, 0.5); // Aligns border to integral values
NSBezierPath *path = [NSBezierPath bezierPathWithOvalInRect:pathRect];
NSColor *fillColor = [NSColor redColor];
NSColor *strokeColor = [fillColor shadowWithLevel:0.5];
[fillColor setFill];
[path fill];
[strokeColor setStroke];
[path stroke];
return YES;
}];
redItem.image = redImage;
Run Code Online (Sandbox Code Playgroud)
关于令牌绘图的内容,请对我的信息持保留态度,因为苹果公司关于这方面的文档非常缺乏,所以我告诉你的一切都来自个人奋斗、咒骂和摇头。不管怎样,很抱歉我不能给你带来更好的消息,但我想,事情就是这样。祝你好运。