代码之家  ›  专栏  ›  技术社区  ›  Philip Regan

有没有NSScroller的“面向基础”示例?

  •  1
  • Philip Regan  · 技术社区  · 17 年前

    还有一些零星的例子,主要是使用编程创建的接口设计的例子,或者基于开发人员正在使用典型的ImageView或TextView的假设。甚至草图示例也基于NSView,该NSView使用打印对话框中的页面设置作为边界,所有内容都由Cocoa管理。因此,对于如何使用自定义模型使其全部工作没有真正的讨论或示例(尽管这可能是问题的一部分,因为模型基于什么?)。即使是苹果自己的文档在这里也是不可靠的。

    本质上,我在NSScrollView中嵌入了一个子类NSView(根据《Scoll视图指南》),用户可以在视图中单击它来创建、编辑和删除对象,就像一个插图程序一样。模型是那些仅仅是数据包装器的对象,它们只是记录它们的位置以供drawRect:使用。高度和宽度基于根据需要转换为像素的自定义值。

    我的问题是,我找到的所有示例都基于文本编辑器、图像查看器,或者使用页面设置对话框中的标准文档大小。因为这些是常见的文档类型,Cocoa基本上是为开发人员管理的,所以交互代码或多或少是隐藏的(或者我只是不知道它是什么)。我的项目不符合这些需求,我也不需要打印。将我的模型插入documentView属性将不起作用。

    (这在Cocoa问题中并不重要,但当我在REALbasic中这样做时,我会根据用户操作简单地计算并应用MaxX,MaxY到滚动条的最大值,当用户单击时观察滚动条中的位置,并根据需要绘制。NSScrollView上下文中的NSScroller对我来说似乎不那么明显。)

    我很感激大家花了这么多时间,但我正在更新更多的信息,希望得到一个我可以使用的答案。我很抱歉,但这一切都没有意义,苹果的文档很迟钝,但也许我遗漏了一些显而易见的东西。。。

    我在一个子类NSDocument中有一个对象数组,它是告诉drawRect要绘制什么和在哪里绘制的数据持有者。这是 来自草图示例。草图示例使用“页面设置”对话框中的文档大小作为大小,因此此处没有显示任何内容。我对Cocoa处理滚动条的状态很在行,但是如何链接ScrollView以查看NSDocument中保存的初始编辑器状态以及对这些对象和编辑器的更新?我是否计算自己的NSRect并将其传递给NSScrollView?在哪里,如何?我是在NSScrollView中嵌入的自定义NSView中还是在init中嵌入的NSDocument中执行此操作?NSScrollView不是以编程方式创建的(没有简单的方法),所以它都在Interface Builder中等待连接。我错过了搭讪的机会。

    也许这周我戴着“我不明白”的帽子,但这不会这么难。插图应用程序、MIDI编辑器和无数其他类似的自定义应用程序一直都在这样做。

    已解决(大部分):

    [self setFrame:[[self EditorDocument] DocumentRect]];
    

    这将根据用户交互更新视图的大小,窗口现在可以处理以前没有处理的滚动。在这一点上,我正在研究如何在拖动时使框架展开,但至少我现在有了我所缺少的基本概念。

    给出的答案为我指明了我需要走的方向(documentView需要一个视图,这转化为查看NSView类),因此Peter获得了荣誉。非常感谢你的帮助。

    1 回复  |  直到 17 年前
        1
  •  4
  •   Peter Hosey    17 年前

    文档视图不是模型,而是视图。这就是为什么它被称为文档 看法 .

    直接使用NSScroller的示例如此之少的原因是您通常不这样做。您可以使用NSScrollView,让它为您处理滚动条。

    您所需要做的就是创建一个足够大的视图来显示整个模型,然后将其设置为滚动视图的文档视图。从那以后,它应该会起作用。您不需要自己管理任何与滚动相关的数字;科科帮你处理。

    有关详细信息,请参阅 Scroll View Programming Guide .