gpt4 book ai didi

objective-c - 验证字体和颜色 NSToolbarItem 项

转载 作者:搜寻专家 更新时间:2023-10-30 19:48:37 26 4
gpt4 key购买 nike

在 OSX 10.6.6 上使用带有最新 SDK 的 Cocoa

我有一个带有自定义工具栏项的 NSToolbar 以及内置字体和颜色的 NSToolbarItem 项(NSToolbarShowFontsItem 和 NSToolbarShowColorsItem 标识符)。

我需要能够在各种情况下启用/禁用它们。问题是 validateToolbarItem: 永远不会为这些项目调用(它正在为我的其他工具栏项目调用)。

文档对此不是很清楚:

The toolbar automatically takes care of darkening an image item when it is clicked and fading it when it is disabled. All your code has to do is validate the item. If an image item has a valid target/action pair, then the toolbar will call NSToolbarItemValidation’s validateToolbarItem: on target if the target implements it; otherwise the item is enabled by default.

我没有为这两个工具栏项明确设置目标/操作,我想使用它们的默认行为。这是否意味着我无法验证这些项目?还是有其他方法可以做到这一点?

谢谢。

最佳答案

经过反复试验,我想我能够解决这个问题并找到合理的解决方法。我将在这里发布一个快速答案,以供将来面临相同问题的其他人引用。

这只是 Cocoa 的又一个设计缺陷。 NSToolbar 具有将 NSToolbarShowFontsItem 和 NSToolbarShowColorsItem 的目标/操作设置为 NSApplication 的硬编码行为,因此文档提示它永远不会为这些 NSToolbarItem 项目调用 validateToolbarItem:

如果您需要验证这些工具栏项目,最简单的做法是不要使用默认的字体/颜色工具栏项目,而是使用您自己的工具栏项目,调用相同的 NSApplication 操作(见下文)。

如果使用默认的,可以将它们的目标/ Action 重定向到您的对象,然后调用原始 Action

- (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
}

下面是将要调用的 Action :

-(IBAction)toolbarOpenFontPanel:(id)sender {
[NSApp orderFrontFontPanel:sender];
}

-(IBAction)toolbarOpenColorPanel:(id)sender {
[NSApp orderFrontColorPanel:sender];
}

我想设计这个的工程师从来没有想过要验证字体/颜色工具栏项目。去图吧。

关于objective-c - 验证字体和颜色 NSToolbarItem 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950160/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com