3

ユーザーがココア アプリケーションにドラッグ アンド ドロップしたファイルのパスをどのように取得するのだろうか。例: ユーザーが自分のデスクトップから test という名前のファイルをドラッグします。次に、cocoa アプリケーションは次のように言います: Users/currentusername/Desktop/test

助けてくれてありがとう!

4

3 に答える 3

2

Appleの「CocoaDragAndDrop」サンプルコードをダウンロードして試してみました。

PNGファイルをFinderから実行中のアプリにドラッグすると、ウィンドウのタイトルがドラッグされた画像のパスに変わります。

サンプルコードの内部を見ると、ファイルのURLがペーストボードに含まれていることがわかります。

 //if the drag comes from a file, set the window title to the filename
 fileURL=[NSURL URLFromPasteboard: [sender draggingPasteboard]];
 [[self window] setTitle: fileURL!=NULL ? [fileURL absoluteString] : @"(no name)"];

独自のコードでこの手法を試して、好みに合わせて変更してください。

于 2012-08-09T19:57:49.007 に答える
1

受け入れられた回答は、Xcode 6 では機能しなくなりました。この方法で同じ結果が得られることがわかりました。

    NSURL*fileURL = [NSURL URLFromPasteboard: [sender draggingPasteboard]];
    NSString *filePath = [fileURL path];
    [[self window] setTitle:filePath];
于 2015-01-02T11:36:25.693 に答える
1

現在、同様のインターフェイスの開発に取り組んでいますが、OP がURL の取得ではなくpathを要求したことを理解しました。受け入れられた回答に対して提案されたOS X 10.10(XCode6)の回避策には、ウィンドウ間でコンテンツをドラッグアンドドロップすることを拒否するという問題があるようです。

ただし、NSString *filePath の宣言を回避し、代わりに提案されたサンプル コードの DragDropImageView.m の 175 行目の [fileURL absoluteString] メソッドを [fileURL path] メソッドに置き換えるだけで解決するようです。

    fileURL=[NSURL URLFromPasteboard: [sender draggingPasteboard]];
    [[self window] setTitle: fileURL!=NULL ? [fileURL path] : @"(no name)"];

Xcode4 から Xcode6、SDK 10.8-10.10、AFAICT で考案されたとおりにコンパイルおよび実行されます。

これが役立つことを願っています。

于 2015-03-18T19:42:23.333 に答える