Objective c 验证字体和颜色NSToolbarItem项目
在OSX 10.6.6上使用Cocoa和最新SDK 我有一个带有自定义工具栏项的NSToolbar,还有内置的字体和颜色NSToolbarItem项(NSToolbarShowFontsItem和NSToolbarShowColorsItem标识符) 我需要能够在各种情况下启用/禁用这些功能。问题是,Objective c 验证字体和颜色NSToolbarItem项目,objective-c,cocoa,macos,Objective C,Cocoa,Macos,在OSX 10.6.6上使用Cocoa和最新SDK 我有一个带有自定义工具栏项的NSToolbar,还有内置的字体和颜色NSToolbarItem项(NSToolbarShowFontsItem和NSToolbarShowColorsItem标识符) 我需要能够在各种情况下启用/禁用这些功能。问题是,validateToolbarItem:从未为这些项目调用过(为我的其他工具栏项目调用过) 文件对此不是很清楚: 工具栏会自动处理 在图像项处于活动状态时使其变暗的步骤 单击并在单击时使其褪色 残废
validateToolbarItem:
从未为这些项目调用过(为我的其他工具栏项目调用过)
文件对此不是很清楚:
工具栏会自动处理
在图像项处于活动状态时使其变暗的步骤
单击并在单击时使其褪色
残废你的代码要做的就是
验证项目。如果是图像项
具有有效的目标/操作对,然后
工具栏将调用
NSToolbarItemValidation's
validateToolbarItem:如果
目标实施;否则
默认情况下,项目处于启用状态
我没有为这两个工具栏项显式设置目标/操作,我希望使用它们的默认行为。这是否意味着我无法验证这些项目?或者我还有其他方法可以做到这一点吗
谢谢。经过一些尝试和错误,我想我能够解决这个问题并找到一个合理的解决办法。我将在这里发布一个快速的答案,供其他面临同样问题的人参考 这只是Cocoa的设计缺陷之一。NSToolbar有一个硬编码行为,用于将NSToolbarShowFontsItem和NSToolbarShowColorsItem的目标/操作设置为NSApplication,以便文档提示它永远不会为这些NSToolbarItem项调用
validateToolbarItem:
如果您需要验证这些工具栏项,那么不需要使用默认的字体/颜色工具栏项,而是使用自己的工具栏项,调用相同的非应用程序操作(见下文)
如果使用默认操作,则可以将它们的目标/操作重定向到对象,然后调用原始操作
- (void) toolbarWillAddItem:(NSNotification *)notification {
NSToolbarItem *addedItem = [[notification userInfo] objectForKey: @"item"];
if([[addedItem itemIdentifier] isEqual: NSToolbarShowFontsItemIdentifier]) {
[addedItem setTarget:self];
[addedItem setAction:@selector(toolbarOpenFontPanel:)];
} else if ([[addedItem itemIdentifier] isEqual: NSToolbarShowColorsItemIdentifier]) {
[addedItem setTarget:self];
[addedItem setAction:@selector(toolbarOpenColorPanel:)];
}
}
现在将调用validateToolbarItem:
:
- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem {
//validate item here
}
下面是将调用的操作:
-(IBAction)toolbarOpenFontPanel:(id)sender {
[NSApp orderFrontFontPanel:sender];
}
-(IBAction)toolbarOpenColorPanel:(id)sender {
[NSApp orderFrontColorPanel:sender];
}
我猜设计这个工具的工程师们从来没有想过要验证字体/颜色工具栏项目。算了吧