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