Macos 如何在Mac OSX上的gui字段中显示多个文件

Macos 如何在Mac OSX上的gui字段中显示多个文件,macos,text,Macos,Text,使用Windows文件对话框,如果选择了多个文件,则这些文件受双引号限制,并用空格分隔,如下所示: "C:\MusicMatched2\Gold Greatest Hits" "C:\MusicMatched2\The Trials of Van Occupanther" 但是OSX也是这样做的,我似乎找不到mac上应用程序的例子,但我需要在mac上Gui应用程序的简单文本字段中正确显示多个文件名。NSOpenPanel的典型用法如下所示 -(void)showFileSelector {

使用Windows文件对话框,如果选择了多个文件,则这些文件受双引号限制,并用空格分隔,如下所示:

"C:\MusicMatched2\Gold Greatest Hits" "C:\MusicMatched2\The Trials of Van Occupanther"

但是OSX也是这样做的,我似乎找不到mac上应用程序的例子,但我需要在mac上Gui应用程序的简单文本字段中正确显示多个文件名。

NSOpenPanel的典型用法如下所示

-(void)showFileSelector {

    NSOpenPanel *openpanel = [NSOpenPanel openPanel];

    [openpanel setDelegate:self];

    [openpanel setCanCreateDirectories:NO];

    [openpanel setCanChooseFiles:YES];

    [openpanel setAllowsMultipleSelection:YES];

    [openpanel setCanChooseDirectories:NO];

    [openpanel beginSheetModalForWindow:self.window
                      completionHandler:^(NSInteger result) {

                          if (result == NSOKButton) {


                              [self doSomethingWithURLS:openpanel.URLs];


                          }


                      }];

}
因此,在您的情况下,最重要的开关是
[openpanel setAllowsMultipleSelection:YES]

您需要使显示面板的对象符合
NSOpenSavePanelDelegate
(或其他对象),然后调用

[openpanel setDelegate:self]

以下哪种方法可用

-(void)panelSelectionDidChange:(id)发送者
其中发送者是面板

- (void)panelSelectionDidChange:(NSOpenPanel *)sender {

   NSArray *urlsSelected = sender.URLs;        

   NSMutableArray *final = [@[] mutableCopy];

    for (NSURL *url in urlsSelected) {

        [final addObject:[NSString stringWithFormat:@"\"%@\"",[url path]]];

    }

    [self.labelToPresentIn setStringValue:[final componentsJoinedByString:@","];

}
因此,每次选择更改时,标签都会更改

这是一个明确的答案如何做你所要求的。您选择在何处显示带有该信息的标签取决于您
NSOpenPanel
有一个属性
accessoryView
,允许您将任意视图粘贴到面板上。像这样

因此,对于启用了多个选择的面板

正如其他评论者提到的,不要试图让你的OSX应用程序看起来和表现得像Windows。Windows是Windows,OSX是OSX。不同的操作系统,不同的用户体验

你问的问题在OSX中看起来有点奇怪,但也许你对你想要的东西有更好的理解


尝试并观察其他OS X应用程序如何使用“保存”和“打开”面板

NSOpenPanel的典型用法如下所示

-(void)showFileSelector {

    NSOpenPanel *openpanel = [NSOpenPanel openPanel];

    [openpanel setDelegate:self];

    [openpanel setCanCreateDirectories:NO];

    [openpanel setCanChooseFiles:YES];

    [openpanel setAllowsMultipleSelection:YES];

    [openpanel setCanChooseDirectories:NO];

    [openpanel beginSheetModalForWindow:self.window
                      completionHandler:^(NSInteger result) {

                          if (result == NSOKButton) {


                              [self doSomethingWithURLS:openpanel.URLs];


                          }


                      }];

}
因此,在您的情况下,最重要的开关是
[openpanel setAllowsMultipleSelection:YES]

您需要使显示面板的对象符合
NSOpenSavePanelDelegate
(或其他对象),然后调用

[openpanel setDelegate:self]

以下哪种方法可用

-(void)panelSelectionDidChange:(id)发送者
其中发送者是面板

- (void)panelSelectionDidChange:(NSOpenPanel *)sender {

   NSArray *urlsSelected = sender.URLs;        

   NSMutableArray *final = [@[] mutableCopy];

    for (NSURL *url in urlsSelected) {

        [final addObject:[NSString stringWithFormat:@"\"%@\"",[url path]]];

    }

    [self.labelToPresentIn setStringValue:[final componentsJoinedByString:@","];

}
因此,每次选择更改时,标签都会更改

这是一个明确的答案如何做你所要求的。您选择在何处显示带有该信息的标签取决于您
NSOpenPanel
有一个属性
accessoryView
,允许您将任意视图粘贴到面板上。像这样

因此,对于启用了多个选择的面板

正如其他评论者提到的,不要试图让你的OSX应用程序看起来和表现得像Windows。Windows是Windows,OSX是OSX。不同的操作系统,不同的用户体验

你问的问题在OSX中看起来有点奇怪,但也许你对你想要的东西有更好的理解


尝试并观察其他OS X应用程序如何使用“保存”和“打开”面板

您不应该在Mac上向用户显示文件路径。首先,用户对文件层次结构的视图与由路径表示的低级视图不同。Finder和标准文件对话框保持了一种文件系统层次结构的一致性假象,而这种层次结构实际上并不存在。例如,每个卷在Finder中都是一个单独的根,但启动卷以外的卷显示在Unix文件系统中的/volumes下。Finder有一个在Unix文件系统中没有表示的计算机视图。通常,查找器会将用户的主文件夹表示为一个独立的根目录,即使用户通常也可以从(启动驱动器)>Users>(用户的帐户名)访问

还有其他微妙之处。例如,各种文件夹的名称可以本地化显示。但是,它们从未在Unix路径级别进行本地化。因此,始终会有一个路径为/Applications的文件夹,但在德国系统上它会显示为“program”

你的应用程序不应该刺破这层面纱,让用户暴露在Unix风格的文件路径下

有一些API用于获取要显示的文件或显示组件数组的“显示名称”(这与获取路径中每个元素的显示名称不同)。您可以将显示组件与一些分隔符字符串连接起来,以生成路径的文本字符串,但实际上并没有标准分隔符

更正确的方法是使用“”()。这是一个GUI小部件,它以标准方式显示文件的位置,带有标准分隔符等


如果需要显示多个文件位置,则可以考虑在搜索时执行查找器所做的操作。它在列表中显示匹配项,当您选择它们时,它会在列表下方的路径控件中显示每个匹配项的位置。您还可以在一列中显示显示名称的表格,在另一列中显示位置的路径控件。

您不应该在Mac上向用户显示文件路径。首先,用户对文件层次结构的视图与由路径表示的低级视图不同。Finder和标准文件对话框保持了一种文件系统层次结构的一致性假象,而这种层次结构实际上并不存在。例如,每个卷在Finder中都是一个单独的根,但启动卷以外的卷显示在Unix文件系统中的/volumes下。Finder有一个在Unix文件系统中没有表示的计算机视图。通常,查找器会将用户的主文件夹表示为一个独立的根目录,即使用户通常也可以从(启动驱动器)>Users>(用户的帐户名)访问

还有其他微妙之处。例如,各种文件夹的名称可以本地化显示。但是,它们从未在Unix路径级别进行本地化。因此,始终会有一个路径为/Applications的文件夹,但在德国系统上它会显示为“program”

您的应用程序不应刺穿此面纱