获得正确的取景器选择Objective-C

时间:2013-02-11 07:17:19

标签: objective-c selection finder

我要求我的小项目的用户打开一个finder窗口并选择一个或多个对象。也允许选择none。在这种情况下,使用所有项目。

在我的应用中,我检查第一个窗口并尝试获取所选项目(文件或文件夹),请参阅 Code1
*请注意,有些变量是全局的,并在.h中声明,有些变量只是重置。 *

如果用户没有在取景器中徘徊,这可以正常工作。但他可以做几件事来欺骗我的应用程序。他可以打开一个取景器窗口,例如并选择几个文件。之后,他可以点击桌面(Finder窗口中的选项仍在那里是正确的),然后直接在桌面上选择项目。当他返回我的应用程序时,它正确识别打开的窗口,但使用桌面上的项目作为选定的项目,这不是我想要的。我想做什么,我想要在最前面的窗口中选择的项目,但我不知道如何做到这一点。

任何线索?

代码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 ] ;

}

1 个答案:

答案 0 :(得分:-1)

  

我想做什么,我想要在最前面的窗口中选择的项目   但是我不明白我是怎么做到的。

问题是您偏离了既定的人机界面指南。您的用户在编写应用程序时将会非常困难地使用您的应用程序。

如果要选择文件/文件夹,请使用NSOpenPanel。

如果您不想要模态窗口,请支持从文件系统拖放。或者使用NSBrowser帮助他们浏览和选择应用程序窗口中的文件。

如果您真的想在Finder中操作,请创建一个Finder插件。