objective-c - 子类化 NSDrawer 的 contentView 以实现完全自定义的抽屉

标签 objective-c cocoa macos nsview

我想通过子类化 NSView 并在其中完成所有 View 绘制来完全实现我自己的自定义抽屉。我创建了一个自定义 NSView 类,除了实现 initWithFrame: 和 drawRect: 之外几乎不做任何事情,我已经记录了 NSView 的框架/边界(报告正确)。我还实例化了此 View ,并使用 setContentView: 将其添加到我的应用程序中的 NSDrawer 对象,以便它使用我的自定义 NSView。

但是,这仍然会绘制附加到我的应用程序 NSWindow 边缘的默认抽屉布局。如何覆盖这个默认样式,以便我可以在自定义的子类 NSView 中绘制自己的抽屉(!),而无需操作系统绘制任何默认样式? (这样我就可以自己控制抽屉的设计和大小,基本上模拟一个不会严格充当传统抽屉的选项卡栏。)

最佳答案

我通过子类化 NSWindow 而不是 NSDrawer 来制作自定义抽屉。这是一项繁重的工作。有一个私有(private)对象 NSThemeFrame,位于 NSWindow 及其 contentView 之间。为了避免使用私有(private) API,你必须创建一个透明窗口并让其 contentView 像 NSThemeFrame 一样工作。 Matt Gallagher 展示了如何:http://cocoawithlove.com/2008/12/drawing-custom-window-on-mac-os-x.html

关于objective-c - 子类化 NSDrawer 的 contentView 以实现完全自定义的抽屉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4868652/

相关文章:

ios - NSNumberFormatter 的准确性问题

cocoa - 如何将 WebView 与动态创建的 HTML 结合使用

objective-c - 如何打开文件/目录获取信息窗口?

objective-c - ARC 的线程和对象生命周期

objective-c - 应用程序在Dealloc上崩溃

objective-c - 我可以在 xcode 中做些什么来解决这不是 utf-8 静态库问题吗?

objective-c - 如何更改 NSOutlineView 中节点的样式?

python - OSX 上的 Virtualenv 使用与我指定的仅 32 位 Python 二进制文件不同的通用 Python 二进制文件

macos - 检查 OpenSSL 版本 >= 0.9.8a... 失败打开 ssl apache http-server Mac OS X El Capitan

ios - UILocalNotification 从应用文档播放声音