2017-08-17 10 views
0

MacOSアプリケーションでNSTableViewのアイテムをLogic Pro X、Finderなどの他のアプリケーションにドラッグできるようにします。 このTableViewのアイテムは、私のHDのファイルを表現しています。Xcode Cocoa - NSTableViewからFinderへのドラッグドロップ

public class AudioFile 
{ 
    #region Computed Propoperties 
    public string Filename { get; set; } = ""; 
    public string Filepath { get; set; } = ""; 
    #endregion 

    public AudioFile() 
    { 
    } 

    public AudioFile(string filename, string filepath) 
    { 
     this.Filename = filename; 
     this.Filepath = filepath; 
    } 
} 

残念ながら、私は、私はC#の(Xamarin)に変換することができスウィフトやObjective-Cのための解決策を見つけることができません。誰か知っているか、ここで助けてくれるコードがありますか?

ありがとうございました!

答えて

0

私はC#については何も知りませんが、SwiftまたはObjective-Cで解決策を尋ねました。私が助けることができること!あなたはまた、コード内またはIBのいずれかでその接続を行う必要があります

class ViewController: NSViewController, NSTableViewDataSource 

:以下、あなたのViewControllerは、テーブルビューのデータソースであることを確認し、すべての4

まずスウィフトです。

次に、テーブルビューをドラッグ元として設定する必要があります。あなたがしたい操作を、選択してください通常どちらか.moveまたは.copy

tableView.setDraggingSourceOperationMask(.move, forLocal: false) 

この例では、のtableViewのコンテンツを管理するためにArrayControllerを使用していることを前提としています。あなたは本当にすべきです、それは物事のホストを容易にします。また、この例は、複数のファイルをドラッグするためのものです。 (これは、単一のファイルのために働くだろうが、あなたがしか1をドラッグしたい場合は、他のアプローチがあります。)

をあなたのViewControllerクラスでは、このメソッドを実装します。

func tableView(_ tableView: NSTableView, writeRowsWith rowIndexes: IndexSet, to pboard: NSPasteboard) -> Bool { 
    var filePaths = [String]() 

    // Swift 4 hack--the FilenamesPboardType is missing 
    let NSFilenamesPboardTypeTemp = NSPasteboard.PasteboardType("NSFilenamesPboardType") 
    pboard.addTypes([NSFilenamesPboardTypeTemp], owner: nil) 

    if let audioFiles = audioFilesArrayController.arrangedObjects as? [AudioFile] { 
     for i in rowIndexes { 
      filePaths.append(audioFiles[i].Filepath) 
     } 
    } 

    pboard.setPropertyList(filePaths, forType: NSFilenamesPboardTypeTemp) 

    return true 
} 

あなたはについての詳細を学ぶことができますNSFilenamesPboardTypeTempハックhere

それだけです!再コンパイルし、1つまたは複数のファイルをFinderウィンドウにドラッグして移動することができます。シンプル。 :-)

関連する問題