在OS X上的Cocoa中实现自定义NSView

时间:2011-01-07 22:21:49

标签: cocoa custom-controls hexdump

我正在创建一个Cocoa应用程序,其中一个视图将包含当前加载的文档的“十六进制转储”。到目前为止,我一直在使用沼泽标准(并且非常不吸引人)NSTextField,但我现在正在寻找更强大的东西。

我是0xED.app的忠实粉丝,并希望复制其主要的“十六进制转储”视图。我该怎么做呢?

我不一定非常关注,但能够在不选择偏移或文本列的情况下选择一系列字节。我无法在哪里开始有效地实施这一点。当然这不是画在空白的画布上的吗?

0xED screenshot

3 个答案:

答案 0 :(得分:0)

我的猜测是,它可能是使用NSTableView或其子类完成的。

以这种方式完成正确的文本选择可能有点棘手,但它可能是可能的。

答案 1 :(得分:0)

开始使用,看看事情是如何运作的:

  1. 子类NSView。
  2. 添加实例变量以保存NSData。
  3. 覆盖drawRect:
  4. 这种方法对于大量数据来说会很慢,但会为您提供实现NSView子类的良好处理。之后,您将希望通过实现比重复调用更好的方式来提高绘图性能,以便一次绘制一个字符串。您还需要实现mouseDown:和keyDown等方法的覆盖,以处理来自用户的输入,以允许选择一系列字节。

    这应该让你开始,一旦你有了这个,我建议你提出后续问题。

答案 2 :(得分:0)

如果您想了解如何构建Cocoa接口,可以使用NibToXibConverter

  1. 下载0xED,右键单击0xED.app并选择"显示包内容"。解压缩Contents / Resources / English.lproj文件夹。
  2. 运行NibToXibConverter,浏览到上面提取的文件夹,并在"反编译NIB"旁边打勾。
  3. 选择"转换"按钮,它会将NIB转换为XIB
  4. 双击XIB在XCode中打开它,你可以看到它们是如何构建的

    • 你会注意到,在0xED的情况下,他正在使用一个自定义类(很可能是一个UIView的子类,带有自定义绘图,如Jon Hess建议的那样)。