使用可拖动的文本元素创建视图

时间:2010-07-09 20:05:13

标签: cocoa draggable subview nstextview

我正在尝试为一种头脑风暴应用程序创建一个视图,例如OmniGraffle,其元素包含文本视图并且可以被拖动。 (此外,应该可以用箭头连接,但这不是(问题))

我完成了我的家庭作业,并通过谷歌搜索并阅读有关可可的书籍,但似乎没有类似的例子。 既然我也是可可的新手,我在这里有点无奈。

我确信的是,我需要一个自定义视图,我可以在其中创建我的元素 - 我到目前为止尝试的是:

  • 首先,我搜索了将子窗口添加到窗口以创建元素的语法。我想,子窗口会自动移动到前面等等 问题:由于你经验丰富的可可程序员可能并不感到惊讶,我惊讶地发现没有任何类似的东西 - 这似乎是某种东西,这只是在Cocoa中没有意图?!

  • 然后我考虑创建包含标题栏图纸的自定义视图的子视图(用户可以单击以拖动元素)和NSTextView。 问题:

    • 我读过,在窗口中创建几十个子视图并不是那么聪明,因为这会非常慢(或者在这种情况下会不会那么糟糕,因为所有子视图都是总是同一个类的实例? )。
    • 此外,我无法找到如何从nib-或xib文件加载子视图。我需要一个viewController吗?或者这会使数十个实例问题更严重?
    • Apple告诉你不要重叠子视图(好吧,那不是那么重要,但我真的很想知道OmniGroup的人们是如何制作OmniGraffle的......)

  • 因此,我现在想在周围的自定义视图中进行标题栏绘制,并以编程方式创建textview(据我所知,文本 - “视图”不是真正的视图并且需要它来自NSCell的功能可以减少视图的所有工作量吗?) 问题:

    • 即便失败,因为我无法创建一个未填满整个窗口的文本视图(initWithFrame:的{​​{1}}似乎被忽略了或者我错了吗?) 。
    • 此外,最终应用程序中的每个元素都应该有一些按钮。我想,使用每个元素的nib文件的子视图会更容易实现吗?

嗯,既然没有任何作用,我读的越多,似乎发生的问题就越多,我感到非常困惑和沮丧。
我怎么能实现这样的程序?有人可以请我朝正确的方向推进我吗?

1 个答案:

答案 0 :(得分:1)

我为可拖动元素创建了一个类,我在实例变量中保存了位置,大小和文本。在我看来,每个新的元素实例都被添加到一个数组中(现在,这可以在没有控制器的情况下工作)。该数组用于绘制drawRect:中循环中的所有元素。对于元素的文本,我只使用NSTextFieldCell,它被设置为同一循环中每个元素的保存文本。

这样也可以重叠元素。