Разработка под Мак. Часть 4. Диалог открытия файлов

Jul 06, 2012 13:37



В этой части - как  вывести диалог открытия файлов и получить из него список файлов, выбранных пользователем.


Диалог открытия файлов

Чтобы получить список файлов, которые хочет открыть пользователь, нужно сделать две вещи:

1. Показать пользователю диалог открытия файлов. Это стандартное действие, нужно только вызвать его.
2. Обработать результат взаимодействия пользователя с диалогом, т.е. прочитать список выбранных файлов.

Ну и далее с этим списком можно что-то сделать. В данном случаем просто выведем простейшее окошко-уведомление с этим списком.

Открываем файл AppDelegate.m и добавляем в него следующий код:

---- код ----

// Диалог открытия файлов
- (IBAction)showFileDialog:(id)sender {

// Создать диалог
    NSOpenPanel *openDlg = [NSOpenPanel openPanel];

// Свойства диалога
    [openDlg setCanChooseFiles:YES];
    [openDlg setCanChooseDirectories:YES];
    [openDlg setAllowsMultipleSelection:YES];

// Вывести диалог модально
    // Если запуск вернул нажатие кнопки OK - обработать выбранные файлы
    if ( [openDlg runModal] == NSFileHandlingPanelOKButton ) {

// Список выбранных файлов
        NSArray *files = [openDlg URLs];

// Показать выбранные файлы
        NSAlert *alert = [[NSAlert alloc] init];
        [alert setMessageText:[files componentsJoinedByString:@",\n"]];
        [alert runModal];
    }
}---- код ----

Обратите внимание на условие if - в нем диалог выводится на экран и одновременно программа останавливается и ждет результата взаимодействия пользователя с диалогом. Если пользователь нажмет в диалоге кнопку "Open", то диалог возвратит NSFileHandlingPanelOKButton и условие станет истинным. Условие сработает и начнется обработка списка выбранных файлов.

Конечным результатом выполнения этого кода  является объект files - список выбранных файлов. Его можно опередать куда-то дальше и сделать с ним что-то осмысленное. В данном случаем, как я уже говорил выше, просто выведем список файлов в уведомлении, слепив значения массива в строку через разделитель - запятую.

Кнопка открытия диалога

Открывем файл интерфейса MainMenu.xib и перетаскиваем в окно программы из библиотеки объектов одну стандартную нажимаемую кнопку. Для красоты переименуем ее в "Open...".

1. Кнопка открытия диалога


Теперь нужно свзязать кнопку с функцией, которую она должна вызывать.

Щелкаем объект "App Delegate" на панели объектов, открываем инспектор связей. В инспекторе, в списке "Received Actions" находим нашу функцию "showFileDialog". Затем протягиваем связь от функции к кнопке "Open...".

2. Кнопка "Open..." связана с функцией "showFileDialog" 


Компилируем и запускаем

Нажатие кнопки "Open..." вызовет на экран стандартный диалог выбота файлов.

3. Диалог выбора файлов


Обратите внимание - диалог на английском, несмотря на то, что система у меня на русском. Это потому, что в нашем приложении не сделана русская локализация. Соответственно, приложение имеет язык по умолчанию - английский. Выдаваемые приложением диалоги тоже будут на английском.

В открывшемся диалоге можно:

1) Нажать "Cancel" - диалог закроется, ничего не произойдет
2) Нажать "Open" - диалог закроется, выбранным файлом будет считаться текущая папка "Мои файлы"
3) Выбрать какие-либо файлы и папки и нажать "Open" - диалог закроется, выбранными файлами будут считаться... эээ... выбранные файлы и папки

Что имено можно выбрать - задается в коде функции "showFileDialog", путем установки свойств диалога. У нас сейчас разрешено выбирать:

1) Файлы (setCanChooseFiles:YES)
2) Папки (setCanChooseDirectories:YES)
3) Выбирать несколько файлов и папок одновременно (setAllowsMultipleSelection:YES)

Эти свойства можно включать/выключать по отдельности.

После выбора каких-нибудь файлов/папок и нажатия кнопки "Open" диалог закроется и выбранный список будет выведен в окошке уведомления.

4. Уведомление с открытыми файлами


Видно, что выбраны папка "Downloader Pro" и файл "PCBSD9.0-x86-DVD.iso". Диалог выбора файлов не делает принципиального различия между папками и файлами, он просто возвращает путь в файловой системе, а что там по этому пути находится - его не касается. Поэтому разбираться с тем, что именно было выбрано, нужно будет самостоятельно.

Репозиторий, бранч filedialog

Часть 3. Локализация приложения
Часть 5. Работа с файлами

mac, разработка

Previous post Next post
Up