NSOpenPanel - Выбор любого файла и игнорирование пакетов
Q: Как делают я устанавливаю NSOpenPanel исключить пакеты файла?
A: Как делают я устанавливаю NSOpenPanel исключить пакеты файла?
Необходимо реализовать метод делегата:
- (BOOL)panel:(id)sender shouldShowFilename:(NSString*)filename
В этом методе необходимо отфильтровать объекты файловой системы, которые являются упакованными каталогами.
Средство поиска и NSOpenPanel обработайте упакованные каталоги по-другому, чем другие каталоги. Вместо того, чтобы вывести на экран содержание упакованного каталога, они обрабатывают его, как будто это был единственный файл. Упакованные каталоги обычно имеют расширение: .app, .bundle, .framework, .plugin, .kext. Если Ваше приложение хочет иметь дело с только файлами, исключая эти типы пакетов, необходимо изменить поведение NSOpenPanel.
Поскольку Вы устанавливаете Ваш NSOpenPanel, удостоверьтесь, что Вы становитесь его делегатом путем вызова:
[openPanel setDelegate: self];
Продолжите для реализации следующего метода делегата только позволить выбирать файлы и не пакеты.
Перечисление 1 метод делегата отфильтровать упакованные файлы.
- (BOOL)panel:(id)sender shouldShowFilename:(NSString*)filename
{
BOOL showObject = YES;
NSDictionary* fileAttribs = [[NSFileManager defaultManager]
fileAttributesAtPath:filename traverseLink:YES];
if (fileAttribs)
{
// check for packages
if ([NSFileTypeDirectory isEqualTo:[fileAttribs objectForKey:NSFileType]])
{
if ([[NSWorkspace sharedWorkspace] isFilePackageAtPath:filename] == NO)
showObject = YES; // it's a folder, OK to show
else
showObject = NO; // it's a packaged directory, don't show
}
else
{
showObject = YES; // it's a file, OK to show
}
}
return showObject;
} |
История версии документа
| Дата | Примечания |
|---|---|
| 25.01.2007 | Новый документ, объясняющий, как сконфигурировать NSOpenPanel для фильтрации только пакетов игнорирования и файлов. |