2016-10-02 13 views
1

私はMacアプリでドラッグを開始しようとしています。ユーザーがクリッピングをデスクトップにドラッグできるように、ドラッグにネイティブUTIとファイルプロミスの両方を提供したい。他のペーストボードタイプをHFS Promiseドラッグにココアで追加するにはどうすればいいですか?

Appleのobsolete documentationによると、これを達成する方法は次のとおりです。 "約束" ドラッグオフ

  1. キックdragPromisedFilesOfTypes:fromRect:source:slideBack:event:

  2. dragImage:at:offset:event:pasteboard:source:slideBack:

をオーバーライドすることによって、追加のペーストボードタイプを追加します。

これの問題は、Appleが以来AppKitのdragImage:メソッドを置き換えたことですbeginDraggingSession: ...とdragPromisedFilesOfTypes:と表示されていません。

これについて今すぐに行くにはどうすればよいですか?

答えて

0

あなたは約束を自分で設定しなければならないようです。例:この例では

let writer = NSPasteboardItem() 

    // We can provide "MP3" data, and/or a "File promise" 
    writer.setDataProvider(
     data_source, 
     forTypes: [ kUTTypeMP3, kPasteboardTypeFileURLPromise] 
    ) 

    // If the receiver wants the "File promise", we'll 
    // be writing a "CAF file" for them 
    writer.setString(AVFileTypeCoreAudioFormat, forType: kPasteboardTypeFilePromiseContent) 

    let drag_item = NSDraggingItem(pasteboardWriter: writer) 

    let drag_session = self.beginDraggingSession(with: [drag_item], event: event, source: self) 

、私はすぐにMP3、またはCAFファイルのための約束を提供することができ、通常のドラッグを設定します。

このような方法でドラッグを開始することで、 "namesPromisedFilesOfTypes:"と同じように "namesOfPromisedFilesDropped:"が呼び出されますが、非約束のコンテンツを設定することもできます。


編集:おかげでMacOSの10.12は、おそらく簡単です "NSFilePromiseProvider" を追加することを指摘しjnadeauします。私は10.10と10.11をサポートする必要がありますが、他の誰かが役に立つと思った場合にこれを言います。

関連する問題