2013-05-27 44 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控件接受文本放置。 –