[英]Validating fonts and colors NSToolbarItem items
在OSX 10.6.6上使用Cocoa和最新的SDK
我有一个NSToolbar,其中包含自定义工具栏项以及内置字体和颜色NSToolbarItem项(NSToolbarShowFontsItem和NSToolbarShowColorsItem标识符)。
我需要能够在各种情况下启用/禁用它们。 问题是validateToolbarItem:
永远不会为这些项调用它(我的其他工具栏项被调用)。
文档不是很清楚:
工具栏会在单击图像项时自动使图像项变暗,在禁用时淡化图像项。 您的所有代码都要验证项目。 如果图像项具有有效的目标/动作对,则工具栏将在目标上调用NSToolbarItemValidation的validateToolbarItem:如果目标实现它; 否则该项目默认启用。
我没有为这两个工具栏项显式设置目标/操作,我想使用它们的默认行为。 这是否意味着我无法验证这些项目? 或者还有其他方法可以做到这一点吗?
谢谢。
经过一些反复试验后,我想我能够弄清楚这一点并找到合理的解决方法。 我将在此发布一个快速答案,以供将来参考面临同样问题的人参考。
这只是Cocoa设计缺陷中的一个。 NSToolbar具有硬编码行为,可将NSToolbarShowFontsItem和NSToolbarShowColorsItem的目标/操作设置为NSApplication,因此文档提示它永远不会调用validateToolbarItem:
这些NSToolbarItem项目。
如果您需要验证那些工具栏项,那么无关紧要的事情就是不使用默认的字体/颜色工具栏项,而是使用自己的工具栏,调用相同的NSApplication操作(参见下文)。
如果使用默认值,则可以将它们的目标/操作重定向到您的对象,然后调用原始操作
- (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];
}
我想设计这个的工程师从未想过会想要验证字体/颜色工具栏项目。 去搞清楚。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.