首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从菜单项创建窗口

从菜单项创建窗口
EN

Stack Overflow用户
提问于 2010-05-19 06:10:24
回答 1查看 1.1K关注 0票数 1

我想在菜单栏上有三个菜单项,快捷键是cmd-1,cmd-2,cmd-3。我知道该怎么做。

每个菜单项将打开一个不同的窗口(win1、win2、win3)。

我想让它在任何时候只允许每个窗口的一个实例打开(即只有一个win1,一个win2,等等)。

如何更好地实现这一点呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-19 06:49:22

如果有问题的窗口在MainMenu.nib中,这很简单;在每个窗口上将操作附加到-makeKeyAndOrderFront:

另一方面,如果它们不在MainMenu.nib中(如果您的应用程序是以正常的方式构建的,则更有可能出现这种情况),事情就会变得稍微复杂一些。长话短说;您需要将菜单项操作附加到某种形式的控制器对象上的适当方法(最有可能是您的应用程序委托,尽管任何“看到”所有需要的nib的控制器都可以);然后让有问题的控制器向其窗口发送类似的消息。

这通常是一种明智的方法,因为您可以将较小的控制器对象附加到您的窗口,如果合适的话,这些控制器对象还可以充当相关窗口中各种视图的数据源。

它还允许延迟加载窗口,这在最后一次统计中是一件好事™。

如果这是某种面向文档(不一定是基于文档)的应用程序,并且窗口显示了当前选择的“文档”或数据片段的某些属性,那么在MainMenu.nib中子类化NSWindowController并加载窗口控制器可能是一个很好的起点。

注意:如果负责控制窗口的对象位于响应器链中,则甚至不需要在MainMenu.nib中引用它们;您只需将用于打开窗口的MainMenu.nibIBAction(例如openDetailsWindow:或类似对象)附加到虚拟FirstResponder对象。(只需将选择器添加到它的已知方法列表中,就可以了。)

Reedit要使窗口不出现在窗口菜单中,可以调用[window setExcludedFromWindowsMenu:YES]

选中/取消选中菜单项有点棘手,因为它需要您的窗口控制器实际了解菜单项;但只要是这样,它就非常简单;使用相关的状态名称(NSOffStateNSOnState)调用-setState:,例如,从显示/关闭窗口时调用的委托方法。(同样,这可以封装在应用程序委托中;如果您出于任何原因不想让MainMenu.nib包含窗口控制器。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2861512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档