2011-05-31 59 views
4

我有一个基于文档的应用程序。每个文档可以有多个窗口。每个窗口都会自动添加到“窗口”菜单。但是,它们或多或少随机且无用的顺序添加。我希望窗口标题根据它们所属的NSDocument进行组织,类似于XCode或Photoshop所做的。如何组织“窗口”菜单?

我该如何做到最好?我如何防止AppKit的默认行为将所有窗口添加到此特殊菜单中,并且我应该在哪里放置以“正确”方式添加菜单项的代码?我不想把处理程序放到每个窗口控制器中!

回答

1

它确实看起来像这是Cocoa应该自动执行的操作。我不知道它是否确实,但首先要检查的是窗口控制器是否正确连接到他们的文档。您的文档子类的windowControllers属性是否包含所有正确的对象?

如果这样做不好,那么从NSWindow's reference它看起来像是唯一的方法来防止其标题被设置添加到Windows菜单的窗口是-[NSWindow setExcludedFromWindowsMenu:]。看起来你想在所有窗口中调用它,然后设置一个对象(可能在MainMenu笔尖),该对象负责所有窗口的位置,并在Windows菜单(通过NSApplication的方法)中对其进行分组。您可能需要放入特殊的禁用物品等才能使分组看起来正确。我希望即使您之前要求将它们排除在外,仍然可以手动添加窗口。

+0

我没有添加窗口到windowControllers数组,但Cocoa没有自动组织菜单。猜猜我必须手动构建窗口菜单并将代码添加到每个窗口控制器......正是我想避免的。 – 2011-06-29 17:15:12

+1

如果有任何安慰,您可以将功能添加到公共超类;或者更好的是,有一个监督对象的作用类似于'NSDocumentController'(甚至是一个'NSDocumentController'子类),它将所有文档的windowControllers按摩到组织好的菜单项中。 – 2011-06-29 17:30:22