macos - 如何设置用于多面板首选项窗口的 NSToolbar 的初始化状态?

标签 macos preferences nstoolbar

我正在尝试使用 NSToolbar 编写多面板首选项窗口,如许多 Mac 应用程序中所示。有一些教程通过以编程方式填充工具栏来完成此操作,但这似乎需要大量“机械”代码,我认为通过在 IB 中设置整个工具栏来保存这些代码。每个 NSToolbar 项都会调用下面的操作,并且标记用于选择 View (从具有 IBOutlet 的同一 Nib 引用):

-(IBAction)changeViewController:(id) sender {
    NSToolbarItem *tbi = (NSToolbarItem*)sender;
    NSString* label = [tbi label];
    NSInteger tag = [tbi tag];
    [self displayViewController:tag];
    NSWindow* window = [self window];
    [window setTitle:label];
}

然后我在每个 NSToolbarItem 上设置自动验证,这将在工具栏项目上提供选定/取消选定的外观。

现在这是我的问题:我无法找到设置初始状态的好方法。当我打开窗口时,没有选择任何工具栏项目,并且我也没有获得任何允许我正确选择它的代码更新。我想出的是这样的:

- (void) awakeFromNib { 
    [self displayViewController:kGeneralPrefsTag];
    NSWindow* window = [self window];
    NSToolbar *toolbar = [window toolbar];
    [toolbar setSelectedItemIdentifier:@"generalPreferences"];
    [window setTitle:@"General"];
}

这都是多余的信息: 1)我需要为此声明工具栏项目的项目标识符 2)我手动复制第一个首选项面板的名称,以便能够设置窗口标题。

有没有更好的方法来初始化工具栏?我如何调用工具栏的第一项,以便它调用changeViewControllerAction?

谢谢。

最佳答案

我使用工具栏选择不同的选项卡并使用以下内容:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [item1 setEnabled: YES];
    [toolbar setSelectedItemIdentifier: @"needItToolbarItem"];

    [item2 setEnabled: YES];
    [item3 setEnabled: YES];
    [item4 setEnabled: YES];
}

这似乎让我得到了我想要的东西,没有太多的废话。我不确定这是否是您正在寻找的答案,但看来您是正确的选择。

关于macos - 如何设置用于多面板首选项窗口的 NSToolbar 的初始化状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4221489/

相关文章:

android - 在 Android 中,我的首选项 xml 文件应该放在哪里?

macos - 将导航按钮添加到统一标题栏/工具栏

macos - CoreAudio实时线程与UI线程通信的正确方法是什么?

python - 带有 py2app 的 OSX 10.11?

c++ - 在 mac 上将我最初安装 Cmake 的位置更改为 usr/local/bin

macos - NSToolbar 图标保持纯黑色,而不是获得漂亮的灰色系统效果

macos - 新 NSSearchToolbarItem 的向后兼容性

macos - nginx docker容器上的连接被拒绝

android - 首选项菜单中 Android 向上/向后导航的动态父 Activity

android - 关闭 PreferenceFragment