如何从NSOutlineView中的NSTextFieldCell中剪切和粘贴文本

时间:2012-08-01 07:28:45

标签: cocoa

我从一开始就编程了iOS,但我是Cocoa的新手,所以请保持温和!

我有一个NSOutlineView,并已从主菜单中实现剪切/复制/粘贴,以剪切/复制/粘贴所选行。

现在我还想让用户在NSTextFieldCell中选择一些文本,复制它,将光标放在不同的NSTextFieldCell中,然后粘贴它。

我设法通过在:

中设置BOOL来发现用户正在单元格内工作
- (BOOL)outlineView:(NSOutlineView *)anOutlineView shouldEditTableColumn:(NSTableColumn*)aTableColumn item:(id)anItem

并在我的编辑结束通知中取消设置,设置如下:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(editingDidEnd:)
                                                 name:NSControlTextDidEndEditingNotification object:nil];

这似乎工作正常。

然后,在我的剪切,复制,粘贴操作中,我可以检查BOOL并做正确的事情 - 如果用户不在单元格内工作则复制整行,如果用户在单元格内工作则复制文本。

但是,当用户在单元格内工作时,我无法了解如何获得我需要的东西。

我考虑过使用NSText剪切:,复制:粘贴:方法,因为它们应该为我处理选择。但我认为我在任何地方都没有NSText对象!

或者,我需要能够从我的NSTextFieldCell读取所选文本,保存它,然后发现要粘贴到的单元格中的插入点,然后粘贴。

或者我缺少更好的内置支持吗?

感谢任何帮助 - 当然是特别的解决方案,但也链接到Cocoa中文本/单元/字段处理的背景引物。

1 个答案:

答案 0 :(得分:2)

一如既往,我发布后就找到了解决方案!

答案是字段编辑器NSTextView是编辑单元格时的第一个响应者。它的超类NSText是支持cut:,copy:和paste:。

的超类

所以剪切复制粘贴命令的“单元格编辑”版本如下所示:

-(void)pasteTextToCell:(id)sender {

    NSTextView* fieldEditor = (NSTextView*)[[appDelegate mainWindow] firstResponder];
    [fieldEditor paste:sender];
}

-(void)copyTextFromCell:(id)sender {

    NSTextView* fieldEditor = (NSTextView*)[[appDelegate mainWindow] firstResponder];
    [fieldEditor copy:sender];
}

-(void)deleteTextFromCell:(id)sender {

    NSTextView* fieldEditor = (NSTextView*)[[appDelegate mainWindow] firstResponder];
    [fieldEditor cut:sender];
}