[英]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 上查看了一些关于获取这些通知(如this和this )的类似问题,看起来我做的一切都是正确的。 但是我没有收到关于窗口角拖动调整大小的通知。 有谁知道为什么?
根据 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.