我正在开发一个新的Mac应用程序,想要打开我的首选项窗口,我有2个Nib(xib)文件,一个用于主窗口,一个用于首选项窗口,然后我有一个openPreferences动作,显示首选项窗口,某事。像这样:
- (IBAction)openPreferences:(id)sender
{
PrefCont *cont = [[PrefCont alloc] init];
[cont showWindow:self];
}
此代码有效,但当我在打开的“首选项菜单项”上单击多次,然后“首选项”窗口打开两次或更多次,然后两次。
有没有可能做到这一点。比如makeKeyAndOrderFront但它必须由PrefController调用吗?
或者我可以问Mac是否打开了窗口?如果没有,那么显示它或者......链接这个。
这非常有帮助,感谢大家!
答案 0 :(得分:6)
如果你想避免双重窗口症状,你应该让PrefCont * cont
成为这个类的ivar,然后执行:
- (IBAction) openPreferences:(id)sender {
if (cont == nil) {
cont = [[PrefCont alloc] init];
}
[cont showWindow:sender];
}
这样你只会创建一个首选项控制器,并告诉它一个显示它的窗口。
完成后不要忘记[cont release];
......
答案 1 :(得分:5)
更好的方法是让PrefCont类具有单例例程,如:
+(PrefCont*)prefs
{
static PrefCont* prefs = nil;
if (!prefs)
prefs = [[PrefCont alloc] init];
return prefs;
}
然后每当您想要显示偏好时,只需致电
[[PrefCont prefs] showWindow:sender];