【问题标题】:Objective-C Preferences Window makeKeyAndOrderFront or showWindow?Objective-C 首选项窗口 makeKeyAndOrderFront 还是 showWindow?
【发布时间】:2017-04-24 04:58:37
【问题描述】:

我正在开发一个新的 Mac 应用程序并想打开我的首选项窗口,我有 2 个 Nib (xib) 文件,一个用于主窗口,一个用于首选项窗口,然后我有一个openPreferences Action,它显示了 Preferences Window,……像这样:

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

此代码有效,但是当我在打开的首选项菜单项上单击不止一次时,首选项窗口会打开两次或更多次。

有没有可能用某物来实现它。像 makeKeyAndOrderFront 但它必须由 PrefController 调用?

或者我可以询问 Mac 是否打开了窗口?如果没有,那就展示它或某事。链接这个。

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

【问题讨论】:

  • 确保您在 Interface Builder 中为您的窗口关闭了“启动时可见”设置。

标签: objective-c macos cocoa


【解决方案1】:

如果你想避免双窗症状,你应该把PrefCont * cont作为这个类的ivar,然后做:

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

这样您将只创建一个首选项控制器,并告诉该控制器显示其窗口。

完成后别忘了[cont release];...

【讨论】:

  • 谢谢,昨天晚上我想到了这个主意 :D 没错,但非常感谢 :)
【解决方案2】:

更好的方法是让 PrefCont 类有一个单例例程,例如:

+(PrefCont*)prefs
{
  static PrefCont* prefs = nil;
  if (!prefs)
     prefs = [[PrefCont alloc] init];

  return prefs;
}

然后当你想显示偏好时,只需调用

  [[PrefCont prefs] showWindow:sender];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 2013-03-27
    相关资源
    最近更新 更多