在 OS X 上的 Cocoa 中实现自定义 NSView
-
08-10-2019 - |
题
我正在创建一个 Cocoa 应用程序,其中一个视图将包含当前加载文档的“十六进制转储”。到目前为止,我一直在使用沼泽标准(而且非常没有吸引力) NSTextField
, ,但我现在正在寻找更强大的东西。
我是以下的忠实粉丝 0xED.app
并希望复制其主要的“十六进制转储”视图。我该怎么做呢?
我不一定追求养眼的效果,而是能够选择一系列字节而无需选择偏移量或文本列。我什至不知道从哪里开始有效地实施这一点。这肯定不是在空白画布上绘制的吗?
解决方案
开始,看看事情基本上是如何工作的:
- 子类NSVIEW。
- 添加一个实例变量以保持您的NSDATA。
- 超级绘制:
- 迭代您的NSDATA
- 使用中的方法 NSString绘图AppKit添加 绘制字节。
对于大量数据,这种方法将很慢,但是可以使您在实现NSVIEW子类方面有一个良好的处理。之后,您需要通过比重复调用一次绘制一个字符串更好的呼叫来提高绘图性能。您还需要实现诸如Mousedown:keydown:处理用户的输入之类的方法的覆盖,以允许选择一系列字节之类的内容。
那应该让您入门,一旦您进行了,我建议您提出后续问题。
其他提示
我的猜测是,它可能是使用 nstableView 或它的子类。
以这种方式完成正确的文本选择可能有些棘手,但这可能是可能的。
如果你想看看 Cocoa 界面是如何构建的,你可以使用 NibToXib转换器.
- 下载 0xED,右键单击 0xED.app 并选择“显示包内容”。提取 Contents/Resources/English.lproj 文件夹。
- 运行 NibToXibConverter,浏览到上面提取的文件夹,然后在“反编译 NIB”旁边打勾。
- 选择“转换”按钮,它将把 NIB 转换为 XIB
双击 XIB 在 XCode 中打开它,您可以看到它们是如何构造的
- 您会注意到,在 0xED 的情况下,他使用的是自定义类(很可能是 UIView 的子类,如 Jon Hess 所建议的那样,具有自定义绘图)。
不隶属于 StackOverflow