我从一开始就编程了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中文本/单元/字段处理的背景引物。
答案 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];
}