我有一个允许打开多个NSDocuments的应用程序。在此应用程序中是一个单独的实用程序窗口,其中包含一些我想要应用于最前面文档的功能。
我试图在这里使用绑定,所以诀窍是如何将实用程序窗口的用户界面干净地绑定到最前面的文档。目标是然后切换最前面的文档窗口将更新实用程序窗口中的视图;当文档模型中的状态发生变化时,绑定到最前面文档模型属性的控件将被适当更新。
要从这样的窗口发送动作,只需使用第一响应者即可;文档对象可以通过响应者链拦截动作。但我想要更多,当然你不能绑定第一响应者。
我有一些想法:
这些似乎都不对。有没有更好的方法来做到这一点,我错过了?
答案 0 :(得分:4)
我总是通过共享应用程序mainWindow.document
绑定,这可以正常工作。如果您有没有文档的窗口,您可能需要添加mainYourKindOfWindow
密钥,该密钥是通过观察mainWindow
并根据某些过滤条件更新值来实现的。
答案 1 :(得分:3)
Leopard的TextEdit为其检查员执行此操作。在file:/// Developer / Examples / AppKit / TextEdit。
中查看答案 2 :(得分:0)
- 在我的笔尖中放置一个对象控制器作为共享窗口。当文档窗口更改最前面的状态时,请更改该绑定的内容。
这对我来说最有意义。您将内容更改为文档实例([NSDocumentController currentDocument]
)。
这样做的一个缺点是,如果我要使用另一种实用程序窗口,我必须记住将文档窗口中的绑定连接到该实用程序窗口!
咦?我不明白这一点。
答案 3 :(得分:0)
Leopard的TextEdit为其检查员执行此操作。请在> file:/// Developer / Examples / AppKit / TextEdit。
中查看
在TextEdit中,检查器值通过中间对象控制器绑定。控制器内容对象绑定到共享应用程序mainWindow。
您可以将内容绑定到mainWindow.firstResponder并取消选中“引发不适用的密钥”。
答案 4 :(得分:0)
使用键窗口,而不是主窗口。 NSApplication的keyWindow属性可能不支持KVO,但如果它不起作用,您仍然可以使用NSNotifications。原因是NSDocumentController的currentDocument使用keyWindow,因此它更好地代表了内置功能。此外,可以设置面板以避免成为关键窗口。