繁体   English   中英

NSWindowDelegate 没有收到调整大小的通知

[英]NSWindowDelegate not getting resize notifications

在 macOS Cocoa 应用程序中,我试图通过设置 NSWindow 委托在我的窗口“角拖动”到新大小时获取通知。 最初创建窗口时,我成功地收到了调整大小事件的通知,但后来将窗口拖动到新大小时却没有。 我不知道为什么不。

这是我的代码:

class MyWindowController: NSWindowController {
    override func windowDidLoad() {
        super.windowDidLoad()
        window?.delegate = self
    }
}

extension MyWindowController: NSWindowDelegate {
    func windowDidResize(_ notification: Notification) {
        print("windowDidResize")
    }
    
    func windowWillResize(_ sender: NSWindow, to frameSize: NSSize) -> NSSize {
        print("windowWillResize")
        return frameSize
    }
}

首次创建窗口时,我看到以下输出:

windowWillResize
windowDidResize

这证明了委托方法是有效的。 但是,当我抓住窗口的一角并调整它的大小时,我看不到任何额外的print输出。

我已经在 SO 上查看了一些关于获取这些通知(如thisthis )的类似问题,看起来我做的一切都是正确的。 但是我没有收到关于窗口角拖动调整大小的通知。 有谁知道为什么?

根据 Willeke 的评论,我在我的 AppDelegate(创建窗口的位置)中创建了对 NSWindowController 子类的强引用,它解决了问题。

对于将来发现这一点的人,这就是我在强参考中创建的方式(在 AppDelegate 中):

// Need to maintain a strong reference while window is open
var myWindowController : MyWindowController?

[...]

func funcThatCreatesWindow() {
  [...]
  self.myWindowController = storyboard.instantiateController(withIdentifier: storyboardID) as? MyWindowController
  if self.myWindowController != nil {
    myWindowController!.showWindow(nil)
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM