Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Mavericks风格标记_Objective C_Macos_Cocoa_Nstokenfield_Nstokenfieldcell - Fatal编程技术网

Objective c Mavericks风格标记

Objective c Mavericks风格标记,objective-c,macos,cocoa,nstokenfield,nstokenfieldcell,Objective C,Macos,Cocoa,Nstokenfield,Nstokenfieldcell,我对cocoa很陌生,我正在尝试如何创建类似于Mavericks中新标签UI的东西: 我想,我必须覆盖NSTokenFieldCell才能获得标签上的彩色点或图标。但是这个弹出列表是如何工作的呢 谢谢你的帮助 遗憾的是,你必须自己动手。在NSTokenFieldCell中进行的几乎所有绘图都是私有的,因此添加任何类型的装饰元素都必须由您完成。如果我没记错的话,NSTokenFieldCell使用NSTokenTextView而不是窗口的标准字段编辑器。我不确定它有什么不同,但我认为主要是处理“

我对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;
关于代币画的东西,请对我的信息持保留态度,因为苹果在这方面的文档非常缺乏,所以我告诉你的一切都是来自个人斗争、咒骂和敲头。无论如何,我很抱歉我不能给你带来更好的消息,但我想,就是这样。祝你好运