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



我从一开始就对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 cut:,copy:paste:方法,因为它们应该为我处理选择。但我认为我在任何地方都没有NSText对象!

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

还是我缺少更好的内置支持?

感谢您提供的任何帮助-当然是特定的解决方案,但也可以链接到Cocoa中文本/细胞/字段处理的背景引物。

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

答案是,字段编辑器NSTextView是编辑单元格时的第一个响应程序。它的超类NSText支持剪切:、复制:和粘贴:。

所以我的"单元格编辑"版本的剪切-复制-粘贴命令看起来像这样:

-(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];
}

最新更新