1

私の小さなプロジェクトのユーザーに、ファインダー ウィンドウを開いて 1 つまたは複数のオブジェクトを選択するように求めています。また、なしを選択することもできます。この場合、すべてのアイテムが使用されます。

私のアプリでは、最初のウィンドウを確認し、選択したアイテム (ファイルまたはフォルダー) を取得しようとしましたCode1を参照してください。
*一部の変数はグローバルで .h で宣言され、一部は単にリセットされることに注意してください。*

これは、ユーザーがファインダー内をいじっていない場合は問題なく機能します。しかし、彼は私のアプリをだますためにいくつかのことを行うことができます. たとえば、ファインダ ウィンドウを開いて、いくつかのファイルを選択できます。その後、彼はデスクトップをクリックして (ファインダ ウィンドウでの選択は正しいままです)、デスクトップで直接項目を選択できます。彼が私のアプリに戻ると、開いているウィンドウを正しく認識しますが、デスクトップのアイテムを選択したアイテムとして使用しますが、これは私が望んでいるものではありません。私がやりたいことは、選択したアイテムを最前面のウィンドウに表示したいのですが、どうすればそれができるのかわかりません。

手がかりはありますか?

コード1

- (void)applicationWillBecomeActive:(NSNotification *)notification  {

   [self psProgressWrapper:FALSE :_spinningWheel :spinningWheelText ] ;

   NSUInteger *countArray = 0;
   asResult = @""; //this variable holds the path to the folder the frontmost window belongs to 

   selectionFlag = FALSE; //reset
   allFilesFlag  = FALSE; //reset

      //Get first finder window
    FinderApplication * finder = [SBApplication applicationWithBundleIdentifier:@"com.apple.finder" ] ;
    SBElementArray *windows = [finder FinderWindows ] ;

    if([windows count] >0) {
        FinderWindow *theWindow = [windows objectAtIndex:0 ] ;
        asResult = [theWindow name ] ;  //the name of the first window

         //setting a texfield in the GUI to text and color green
      [_errMessage setStringValue:asResult ] ;
      [_errMessage setTextColor: myGreenColor ] ;

      SBElementArray * selection = [[finder selection] get ] ;
      countArray = [selection count ] ;

      if(countArray == 0) {
         atFilesOriginal = (NSMutableArray*) [self checkForSelection:asResult :TRUE ] ;
      }
      else if(countArray > 0) {
         atFilesOriginal = (NSMutableArray*) [selection arrayByApplyingSelector:@selector(name) ] ;
      }
      else {
         asResult = @"NoWin";
      }
   }
   else {
      asResult = @"NoWin";
      [self checkFinderWindowType ] ;
   }

   [self refreshDRPopsWrapper] ;
   [self psProgressFlag:TRUE Wheel:_spinningWheel Text:spinningWheelText];

   [self goConvertBtnWrapper   ] ;
   [self checkFinderWindowType ] ;

}
4

1 に答える 1

-1

やりたいこと、一番前のウィンドウに選択したアイテムが欲しいのですが、どうすればいいのかわかりません。

問題は、確立されたヒューマンインターフェイスガイドラインから逸脱していることです。あなたのユーザーはあなたがそれを書いているのと同じくらいあなたのアプリを使うのに苦労するでしょう。

ファイル/フォルダーの選択を取得する場合は、NSOpenPanelを使用します。

モーダルウィンドウが必要ない場合は、ファイルシステムからのドラッグアンドドロップをサポートします。または、NSBrowserを使用して、アプリケーションのウィンドウ内でファイルを参照および選択できるようにします。

本当にFinderで操作したい場合は、Finderプラグインを作成してください。

于 2013-02-11T07:49:19.500 に答える