Objective-C首选项窗口makeKeyAndOrderFront或showWindow?

时间:2010-02-11 20:04:47

标签: objective-c macos cocoa

我正在开发一个新的Mac应用程序,想要打开我的首选项窗口,我有2个Nib(xib)文件,一个用于主窗口,一个用于首选项窗口,然后我有一个openPreferences动作,显示首选项窗口,某事。像这样:

- (IBAction)openPreferences:(id)sender
{
    PrefCont *cont = [[PrefCont alloc] init];
    [cont showWindow:self];
}

此代码有效,但当我在打开的“首选项菜单项”上单击多次,然后“首选项”窗口打开两次或更多次,然后两次。

有没有可能做到这一点。比如makeKeyAndOrderFront但它必须由PrefController调用吗?

或者我可以问Mac是否打开了窗口?如果没有,那么显示它或者......链接这个。

这非常有帮助,感谢大家!

2 个答案:

答案 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];