2

在此处输入图像描述

如果您将选定的文本拖放到文件夹中,您将获得一个扩展名为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”运行搜索没有任何结果。

感谢您的意见。

4

1 回答 1

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;
}
于 2013-05-27T07:22:29.527 回答