【问题标题】:Detecting focus/unfocus of active NSDocument检测活动 NSDocument 的焦点/不焦点
【发布时间】:2020-02-07 14:03:50
【问题描述】:

是否有办法检测 NSDocument 的焦点/非焦点?我想动态更新与活动文档相关的菜单项,但我看不到任何直接明显的方法。

原因是,我想在文档焦点上激活然后填充菜单,然后在失去焦点时取消填充和停用。

有什么想法吗?

谢谢,

【问题讨论】:

    标签: objective-c cocoa macos


    【解决方案1】:

    似乎 NSDocument 被设置为所有文档窗口的委托,因此我的 NSDocument 子类中所需的钩子是:

    - (void) windowDidBecomeMain: (NSNotification *) notification
    {
        NSLog(@"windowDidBecomeMain:");     
    }
    
    
    - (void) windowDidResignMain: (NSNotification *) notification
    {
        NSLog(@"windowWillResign:");        
    }
    
    
    - (void) windowWillClose: (NSNotification *) notification
    {
        NSLog(@"windowWillClose:");
    }
    

    【讨论】:

    • NSDocumentController.currentDocument 定义为“与主窗口关联的文档对象。(只读)”。所以我认为这是正确的。
    • 只是一个注释。这似乎并不总是捕捉事件。例如,应用程序启动时最初聚焦的窗口不会触发事件...
    【解决方案2】:

    上面的解决方案不起作用,这个解决了:

    我有一个窗口控制器(NSWindowController 的子类),我在窗口上添加了一个委托

    -(void)windowDidLoad {
        [super windowDidLoad];
        self.window.delegate = self;
    }
    
    -(void)windowDidBecomeKey:(NSNotification *)notification {
        // this gets called
    }
    

    【讨论】:

      猜你喜欢
      • 2013-04-15
      • 2022-09-23
      • 2011-09-16
      • 2012-05-27
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多