1
我已經創建了子類NSTextView
,這樣我就可以刪除文件並將文件的字符串內容複製到視圖中(與將文件路徑放入風景)。文本似乎正在丟失,但在丟棄後不可見。我可以看到光標已移動,甚至可以將刪除的文本複製到視圖外並粘貼到例如TextEdit中。我嘗試在我的-performDragOperation:
方法的末尾添加[self setNeedsDisplay:YES]
,但行爲沒有改變。NSTextView拖放 - 刪除後字符不可見
這是我迄今爲止編寫的代碼。我想這不是實現這一點的最佳方式。我是新來的可可拖放實現。
-(NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender {
NSPasteboard *pb = [sender draggingPasteboard];
NSDragOperation dragOperation = [sender draggingSourceOperationMask];
if ([[pb types] containsObject:NSFilenamesPboardType]) {
if (dragOperation & NSDragOperationCopy) {
return NSDragOperationCopy;
}
}
if ([[pb types] containsObject:NSPasteboardTypeString]) {
if (dragOperation & NSDragOperationCopy) {
return NSDragOperationCopy;
}
}
return NSDragOperationNone;
}
-(BOOL)performDragOperation:(id<NSDraggingInfo>)sender {
NSPasteboard *pb = [sender draggingPasteboard];
if ([[pb types] containsObject:NSFilenamesPboardType]) {
NSArray *filenames = [pb propertyListForType:NSFilenamesPboardType];
for (NSString *filename in filenames) {
NSStringEncoding encoding;
NSError * error;
NSString * fileContents = [NSString stringWithContentsOfFile:filename usedEncoding:&encoding error:&error];
if (error) {
// handle error
}
else {
[self setString:fileContents];
}
}
}
else if ([[pb types] containsObject:NSPasteboardTypeString]) {
NSString *draggedString = [pb stringForType:NSPasteboardTypeString];
[self setString:draggedString];
}
return YES;
}