我的应用有首选项窗口。我用这段代码打开它
- (IBAction)openPreferences:(id)sender {
NSWindowController *windowController = [[NSWindowController alloc] initWithWindowNibName:@"Preferences"];
[windowController window];
}
如果再次按命令 - 将再次打开新的“首选项”窗口 - 一次又一次......
如何只打开一个窗口?谢谢!
答案 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
都会返回窗口的同一个实例。