如何只打开一个窗口“首选项”?

时间:2011-09-21 11:42:06

标签: objective-c macos

我的应用有首选项窗口。我用这段代码打开它

- (IBAction)openPreferences:(id)sender {

    NSWindowController *windowController = [[NSWindowController alloc] initWithWindowNibName:@"Preferences"];
    [windowController window];
}

如果再次按命令 - 将再次打开新的“首选项”窗口 - 一次又一次......

如何只打开一个窗口?谢谢!

2 个答案:

答案 0 :(得分:6)

使windowController成为AppDelegate的实例变量,并将打开的首选项更改为

- (IBAction)openPreferences:(id)sender
{
    if( windowController == nil )
        windowController = [[NSWindowController alloc] initWithWindowNibName:@"Preferences"];
    [windowController showWindow:sender];
}

答案 1 :(得分:0)

所以这就是我解决它的方式...... 我有一个类“MyPreferencesWindowController”,它有一个名为getInstance的方法。当您想要获取首选项窗口时,会调用此方法。该解决方案利用了单例技术。

/**
Method in my MyPreferencesWindowController.m file
with a corresponding method in the .h file.
*/
+(id) getInstance {

    static PreferencesWindowController *instance = nil;
    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{
        instance = [[self alloc] init];
    });
    return instance;
}

现在,在Document类中,当您想要显示首选项窗口时,请执行以下操作:

-(IBAction) showPreferences:(id)sender {
    if (preferencesWc  == nil)
        preferencesWc = [MyPreferencesWindowController getInstance];

    [ preferencesWc showWindow:self ];
}

这将确保首选项窗口仅创建一次。然后每次调用getInstance都会返回窗口的同一个实例。