只看我会用什么只允许选择特定的文件(目前的图像)
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];?
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",或者在上面定义此方法的任何位置.
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)