【问题标题】:How do I set the init state of a NSToolbar used for a multi panel preference window?如何设置用于多面板首选项窗口的 NSToolbar 的初始化状态?
【发布时间】:2010-11-19 02:01:39
【问题描述】:

我正在尝试使用 NSToolbar 编写多面板首选项窗口,这在很多 Mac 应用程序中都可以看到。有一些教程通过以编程方式填充工具栏来做到这一点,但这似乎需要很多“机械”代码,我想通过在 IB 中设置整个工具栏来保存这些代码。每个 NSToolbar 项目调用下面的操作,标签用于选择视图(从同一个 nib 和 IBOutlet 引用):

-(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 上设置 Autovalidates,这将在工具栏项目上提供选中/取消选中的外观。

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

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

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

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

谢谢。

【问题讨论】:

    标签: macos preferences nstoolbar


    【解决方案1】:

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

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

    这似乎让我得到了我想要的东西,而且没有太多的冗长。我不确定这是否是您正在寻找的答案,但您似乎是正确的方向之一。

    【讨论】:

      猜你喜欢
      • 2012-06-15
      • 1970-01-01
      • 2017-06-15
      • 2012-08-09
      • 2019-10-30
      • 1970-01-01
      • 2021-03-10
      • 2010-10-26
      • 2019-09-02
      相关资源
      最近更新 更多