swift - 当我以编程方式从 Storyboard 加载窗口时,为什么在 NSView 中未调用 drawRect?

标签 swift macos cocoa xib nib

我的 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/

相关文章:

ios - 有没有办法在 swift 框架中覆盖应用程序委托(delegate)?

php - 如何让 php 判断它是在 iOS 还是 MacOS 上运行

objective-c - 我应该将托管对象上下文作为方法的参数包含在内吗?

objective-c - 关于释放属于另一个对象的对象 - xcode 内存管理

ios - 为搜索栏委托(delegate)赋值 - Swift

ios - UITableViewCell 在移出可见的 uitableView 后具有灰色背景

ios - 如何在重新加载时清除 UICollectionViewCell?

macos - 在 Visual Studio Code 中的 arg 中使用通配符的任务命令

python - 由于 MACOSX_DEPLOYMENT_TARGET,Big Sur clang "invalid version"错误

swift - 如何在绑定(bind)到核心数据的 NSPopUpButton 中预选一个项目?