【发布时间】:2020-02-07 14:03:50
【问题描述】:
是否有办法检测 NSDocument 的焦点/非焦点?我想动态更新与活动文档相关的菜单项,但我看不到任何直接明显的方法。
原因是,我想在文档焦点上激活然后填充菜单,然后在失去焦点时取消填充和停用。
有什么想法吗?
谢谢,
【问题讨论】:
标签: objective-c cocoa macos
是否有办法检测 NSDocument 的焦点/非焦点?我想动态更新与活动文档相关的菜单项,但我看不到任何直接明显的方法。
原因是,我想在文档焦点上激活然后填充菜单,然后在失去焦点时取消填充和停用。
有什么想法吗?
谢谢,
【问题讨论】:
标签: objective-c cocoa macos
似乎 NSDocument 被设置为所有文档窗口的委托,因此我的 NSDocument 子类中所需的钩子是:
- (void) windowDidBecomeMain: (NSNotification *) notification
{
NSLog(@"windowDidBecomeMain:");
}
- (void) windowDidResignMain: (NSNotification *) notification
{
NSLog(@"windowWillResign:");
}
- (void) windowWillClose: (NSNotification *) notification
{
NSLog(@"windowWillClose:");
}
【讨论】:
NSDocumentController.currentDocument 定义为“与主窗口关联的文档对象。(只读)”。所以我认为这是正确的。
上面的解决方案不起作用,这个解决了:
我有一个窗口控制器(NSWindowController 的子类),我在窗口上添加了一个委托
-(void)windowDidLoad {
[super windowDidLoad];
self.window.delegate = self;
}
-(void)windowDidBecomeKey:(NSNotification *)notification {
// this gets called
}
【讨论】: