2011-12-20 34 views
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; 

} 

答えて

0

実装されていない-drawRect:のスタブがありました。

スタブを削除した後、すべてが意図どおりに機能します。

関連する問題