使用NSImageView Drop Box接受TextClipping

时间:2013-05-27 04:13:52

标签: objective-c macos text osx-mountain-lion nsimageview

enter image description here

如果将选择的文本拖放到文件夹中,您将获得扩展名为 textClipping 的文件。 TextEdit 的文档窗口接受文本选择。许多应用程序都接受textClipping。如何在 NSImageView 下拉框中收到文本选择? performDragOperation 的常规操作似乎不接受选择的文字。

- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender {
NSPasteboard *pboard = [sender draggingPasteboard];
NSArray *urls;
    if ([[pboard types] containsObject:NSURLPboardType]) {
        urls = [pboard readObjectsForClasses:@[[NSURL class]] options:nil];
    }

    AppDelegate *appDelegate = (AppDelegate *)[NSApp delegate];
    ...
    ...

    return YES;
}

这些代码行让我接受文件,但不接受textClipping。接受textClipping的秘诀是什么?也许,你不能用NSImageView接受它?使用'Objective-C textClipping'运行搜索没有任何结果。

感谢您的建议。

1 个答案:

答案 0 :(得分:2)

文本剪辑是字符串或属性字符串(如果内容包含富文本) 要从粘贴板中读取这些对象,您必须分别搜索NSStringPboardTypeNSRTFPboardType

NSStringPboardType可以理解为NSString NSRTFPboardType可以被理解为NSAttributedString

- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender
{
    NSPasteboard* pboard = [sender draggingPasteboard];
    NSArray* pboardContents = nil;
    if ([[pboard types] containsObject:NSURLPboardType])
    {
        pboardContents = [pboard readObjectsForClasses:@[[NSURL class]] options:nil];
    }
    if ([[pboard types] containsObject:NSStringPboardType])
    {
        pboardContents = [pboard readObjectsForClasses:@[[NSString class]] options:nil];
    }
    if ([[pboard types] containsObject:NSRTFPboardType])
    {
        pboardContents = [pboard readObjectsForClasses:@[[NSAttributedString class]] options:nil];
    }
    NSLog(@"Pasteboard contents:%@", pboardContents);
    return YES;
}