在多个NSMenus之间共享NSMenuItems

时间:2010-08-17 14:42:12

标签: cocoa interface-builder nsmenu

我在同一个应用程序中有多个菜单,并希望在它们之间共享子菜单。

为简单起见,我们假设一个是主菜单,另一个是停靠栏菜单..

我的子菜单包含很多项(比方说字体名称),其中很多我需要保留iboutlet引用的各种原因。

在IB中我无法找到任何“共享”这些子菜单的方法,所以我最终复制了IB定义(即,手动重新创建两个不同位置的每个项目),保持对两个nsmenuitems的引用而不是只是一个等等。这不好。

有没有办法在多个NSMenus之间共享子菜单定义?

我试图在IB中创建一个顶级菜单项,但我似乎无法将其链接到菜单定义中的任何内容。此外,我担心即使我设法以编程方式执行此操作,也可能会破坏绑定,响应者层次结构,内存管理等。

这样做有最好的做法吗?有人做过吗?结果是什么?

1 个答案:

答案 0 :(得分:1)

如果同一控制器是所有菜单项的目标,则将其设置为其委托,并让它实现NSMenuDelegate协议 - 特别是numberOfItemsInMenu:menu:updateItem:atIndex:shouldCancel:方法。每个菜单都会询问您应该拥有多少项目,根据需要创建尽可能多的项目以填补缺陷,然后要求您填写它们(包括设置其行动和可能的目标)。

结果是代码中的一个位置定义了两个菜单。