NSOpenPanel - 设置文件类型?

Epi*_*ewd 6 cocoa

只看我会用什么只允许选择特定的文件(目前的图像)

setFileTypesArray 回报

NSOpenPanel可能不响应-setFileTypesArray:

然后面板根本没有打开.继承我的代码:

    NSArray  * fileTypes = [NSArray arrayWithObjects:@"png",@"tiff",@"baz",nil];

NSLog(@"Button Pressed");
[textField setStringValue:@"Test"];
int i; // Loop counter.

NSOpenPanel* openDlg = [NSOpenPanel openPanel];

[openDlg setCanChooseFiles:YES];
[openDlg setFileTypesArray:fileTypes];
Run Code Online (Sandbox Code Playgroud)

谢谢.

Ces*_*vas 27

怎么样[openDlg setAllowedFileTypes:fileTypes];

  • 从 macOS Big Sur 开始,此属性已被弃用,有人知道推荐的替代品吗? (3认同)

smd*_*lpr 13

您正在寻找NSSaveOpenPanel委托的委托方法

-(BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename
{
        NSString* ext = [filename pathExtension];
        if (ext == @"" || ext == @"/" || ext == nil || ext == NULL || [ext length] < 1) {
                return TRUE;
        }

        NSLog(@"Ext: '%@'", ext);

        NSEnumerator* tagEnumerator = [[NSArray arrayWithObjects:@"png", @"tiff", @"jpg", @"gif", @"jpeg", nil] objectEnumerator];
        NSString* allowedExt;
        while ((allowedExt = [tagEnumerator nextObject]))
        {
                if ([ext caseInsensitiveCompare:allowedExt] == NSOrderedSame)
                {
                        return TRUE;
                }
        }

        return FALSE;
}
Run Code Online (Sandbox Code Playgroud)

然后,将面板的委托设置为"self",或者在上面定义此方法的任何位置.

  • 长期诽谤 (2认同)

Pet*_*isu 10

你可以去看看

[panel setAllowedFileTypes:[NSImage imageTypes]];
Run Code Online (Sandbox Code Playgroud)

或者实现委托NSOpenSavePanelDelegate

并实施

- (BOOL)panel:(id)sender shouldEnableURL:(NSURL *)url {

    NSString * fileExtension = [url pathExtension];
    if (([fileExtension  isEqual: @""]) || ([fileExtension  isEqual: @"/"]) || (fileExtension == nil)) {
        return YES;
    }

    NSSet * allowed = [NSSet setWithArray:@[@"png", @"tiff", @"jpg", @"gif", @"jpeg"]];
    return [allowed containsObject:[fileExtension lowercaseString]];

}
Run Code Online (Sandbox Code Playgroud)

  • 注意:在10.10版本中,不推荐使用[NSImage imageFileTypes],现在首选的方法是[NSImage imageTypes]。 (2认同)

wal*_*lky 8

您正在寻找的方法是setAllowedFileTypes- 查看父类NSSavePanel的文档.