2013-05-27 38 views
2

enter image description here与NSImageView投递箱

接受TextClipping如果你拖放选定的文本到一个文件夹,你会得到一个文件textClipping的延伸。 文本编辑的文档窗口接受文本选择。许多应用程序都接受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'运行搜索什么都没有。

谢谢您的建议。

回答

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; 
} 
+0

谢谢weichsel。包含此代码的NSImageView拖放框似乎不接受文本拖放。我做错了什么,你知道吗? –

+0

实际上,我似乎可以使用NSTextView控件接受文本放置。 –