我的 Main.storyboard 文件中有一个窗口,我试图以编程方式加载该窗口,而不是在应用程序启动时加载。所以我完全删除了“ Storyboard入口点”,并且在 AppDelegate.swift 中,我有:
let storyBoard = NSStoryboard(name: "Main", bundle: nil)
let pauseWindowController = storyBoard.instantiateControllerWithIdentifier("pauseWindowController")
pauseWindowController.showWindow(self)
这似乎有效,但是当我运行该应用程序时,我没有看到任何窗口。我在我的应用程序中添加了跟踪代码来跟踪事件的进展,我发现我的自定义 NSView 子类已初始化,但始终不会调用drawRect。如果我删除上面的代码并重新添加 Storyboard入口点(指向窗口 Controller ),一切都会正常工作。
这是我为跟踪添加的 print
调用的结果,其中显示了调用类和调用的方法:
(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
行,并且窗口应该显示,但该方法永远不会被调用。为什么?
我在窗口的 Storyboard编辑器中选中了“启动时可见”。据我了解,如果 View 脏且可见,则调用 drawRect
。我想它由于某种原因不可见,但无法找出原因。
最佳答案
我发现了我的错误:我没有将 pauseWindowController
属性 (varpauseWindowController : NSWindowController!
) 添加到 AppDelegate.swift 文件的顶部。然后代码应该变成
let storyBoard = NSStoryboard(name: "Main", bundle: nil)
pauseWindowController = storyBoard.instantiateControllerWithIdentifier("pauseWindowController") as! NSWindowController
pauseWindowController.showWindow(self)
关于swift - 当我以编程方式从 Storyboard 加载窗口时,为什么在 NSView 中未调用 drawRect?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33598905/