3

制作具有可编辑文本区域的自定义 NSView 所需的最低实现是什么?我假设 NSTextFieldCell 可以用于此。我已经成功地在视图中绘制了单元格(这很简单),但是使其可编辑似乎需要在视图和单元格之间进行更复杂的协调。在某处有可用的示例代码吗?

更新。我应该明确表示我的长期目标是在同一个视图上拥有更多可编辑的文本区域。AFAIU 在这种情况下最好使用单元格,因为它们比完整的视图更轻量级。我更新的问题是:使用适当的 NSCell 制作具有可编辑文本区域的自定义 NSView 所需的最低实现是什么?

4

3 回答 3

1

如果您想制作一个文本字段网格(可能是动态数量),请使用 NSTextFieldCells 的 NSMatrix。当然,您可以将 NSMatrix 添加为自定义视图的子视图。

于 2010-05-27T13:49:18.280 回答
1

制作具有可编辑文本区域的自定义 NSView 所需的最低实现是什么?

  1. 制作一个 NSView。
  2. 在里面放一个 NSTextField。

请记住,NSViews(自定义或其他)可以包含其他 NSViews,并且NSTextField是一种 NSView。

如果您不希望自定义视图类之外的代码知道文本字段,而且可能不应该,自定义视图可以创建文本字段并将其作为私有实现细节添加到自身。为此,只需不要在自定义视图类中公开文本字段@interface(除了实例变量声明,这是不可避免的)。

当然,自定义视图不应在其文本字段的任何位置绘制。它可以在那里绘制,但文本字段会覆盖它。

我假设 NSTextFieldCell 可以用于此。

是的,如果你不介意重新实现 NSTextField。添加 NSTextField 作为视图的子视图要容易得多。

于 2010-05-27T10:14:36.483 回答
1

如果要编辑文本单元格,只需调用editWithFrame:inView:editor:delegate:event:单元格对象。此方法需要NSEvent启动编辑的 ,因此您只能从事件处理程序中调用它。还有selectWithFrame:inView:editor:delegate:start:length:一个设置字段编辑器的选项。如果您需要从事件处理程序外部开始编辑,您可以使用它。

用户完成编辑后,您需要调用endEditing:您的单元格。

于 2010-11-11T18:43:42.133 回答