为什么当我以编程方式从情节提要中加载 window 时,NSView 中未调用 drawRect?
Why is drawRect not called in the NSView when I programmatically load my window from a storyboard?
我的 Main.storyboard 文件中有一个 window,我试图以编程方式加载,而不是在应用程序启动时加载。所以我完全删除了 "Storyboard Entry Point",在 AppDelegate.swift 中,我有:
let storyBoard = NSStoryboard(name: "Main", bundle: nil)
let pauseWindowController = storyBoard.instantiateControllerWithIdentifier("pauseWindowController")
pauseWindowController.showWindow(self)
这似乎可行,但是当我 运行 应用程序时,我没有 window。我在我的应用程序中添加了跟踪代码以跟踪事件的进展,我发现我的自定义 NSView subclass 已初始化,但从未调用 drawRect。如果我删除上面的代码并重新添加故事板入口点(指向 window 控制器),一切正常。
这是我为跟踪添加的 print
调用的结果,显示了调用 class 和调用的方法:
(AppDelegate) applicationDidFinishLaunching
(Pause OverlayWindow : NSWindow) Window init
(PauseOverlayView : NSView) View init
(PauseViewController: NSViewController) viewDidLoad
(PauseViewController: NSViewController) viewDidAppear
(PauseViewController: NSViewController) viewWillDisappear
(PauseViewController: NSViewController) viewDidDisappear
viewDidAppear
之后应该有一行 (PauseOverlayView : NSView) drawRect
行,window 应该显示,但从未调用该方法。为什么?
我已经 "Visible At Launch" 在 Storyboard 编辑器中检查了我的 window。据我了解,如果视图脏且可见,则调用 drawRect
。我想它由于某种原因不可见,但找不到原因。
我发现了我的错误:我没有将 pauseWindowController
属性 (var pauseWindowController : NSWindowController!
) 添加到我的 AppDelegate.swift 文件的顶部。然后代码应该变成
let storyBoard = NSStoryboard(name: "Main", bundle: nil)
pauseWindowController = storyBoard.instantiateControllerWithIdentifier("pauseWindowController") as! NSWindowController
pauseWindowController.showWindow(self)
我的 Main.storyboard 文件中有一个 window,我试图以编程方式加载,而不是在应用程序启动时加载。所以我完全删除了 "Storyboard Entry Point",在 AppDelegate.swift 中,我有:
let storyBoard = NSStoryboard(name: "Main", bundle: nil)
let pauseWindowController = storyBoard.instantiateControllerWithIdentifier("pauseWindowController")
pauseWindowController.showWindow(self)
这似乎可行,但是当我 运行 应用程序时,我没有 window。我在我的应用程序中添加了跟踪代码以跟踪事件的进展,我发现我的自定义 NSView subclass 已初始化,但从未调用 drawRect。如果我删除上面的代码并重新添加故事板入口点(指向 window 控制器),一切正常。
这是我为跟踪添加的 print
调用的结果,显示了调用 class 和调用的方法:
(AppDelegate) applicationDidFinishLaunching
(Pause OverlayWindow : NSWindow) Window init
(PauseOverlayView : NSView) View init
(PauseViewController: NSViewController) viewDidLoad
(PauseViewController: NSViewController) viewDidAppear
(PauseViewController: NSViewController) viewWillDisappear
(PauseViewController: NSViewController) viewDidDisappear
viewDidAppear
之后应该有一行 (PauseOverlayView : NSView) drawRect
行,window 应该显示,但从未调用该方法。为什么?
我已经 "Visible At Launch" 在 Storyboard 编辑器中检查了我的 window。据我了解,如果视图脏且可见,则调用 drawRect
。我想它由于某种原因不可见,但找不到原因。
我发现了我的错误:我没有将 pauseWindowController
属性 (var pauseWindowController : NSWindowController!
) 添加到我的 AppDelegate.swift 文件的顶部。然后代码应该变成
let storyBoard = NSStoryboard(name: "Main", bundle: nil)
pauseWindowController = storyBoard.instantiateControllerWithIdentifier("pauseWindowController") as! NSWindowController
pauseWindowController.showWindow(self)