Задать вопрос
absterno
@absterno

Как правильно закрывать NSOpenPanel?

Мне нужно загрузить список файлов из директории. Для этого я использую метод beginSheetModalForWindow:completionHandler: , затем выбираю директорию и нажимаю OK. В моем случае после OK вызывается метод addToList: который условно загружает файлы и панель NSOpenPanel не закрывается до тех пор пока метод addToList: не закончить свою работу. Если нужно вызвать sheet с NSProgressIndicator который показывает статус загрузки файлов то он всплывает поверх NSOpenPanel. Мне это многообразие sheet'ов не нравится и я решил этот вопрос вызовом метода close для NSOpenPanel перед вызовом sheet с прогрессом.

Например:

NSOpenPanel *panel = [NSOpenPanel openPanel];
[panel beginSheetModalForWindow:window completionHandler:^(NSInteger result) {
        if (result == NSOKButton) {

            [panel close]; //<--- Закрываю sheet c NSOpenPanel

            [NSApp beginSheet:progressSheet modalForWindow:window modalDelegate:nil 
               didEndSelector:nil contextInfo:nil]; //<--- Открываю sheet c индикатором прогресса

            [self addToList:panel.URL]; // <--- загружаю файлы

            [progressSheet orderOut:self];  //
            [NSApp endSheet:progressSheet]; //<--- Закрываю sheet c индикатором прогресса

        }
     }];

Является ли мое решение с вызовом [panel close] правильным выбором. И как подобные веши реализовываете Вы?

Всех зарание благодарю.
  • Вопрос задан
  • 281 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 1
absterno
@absterno Автор вопроса
Облазив множество ресурсов и изучив приличное количество приложений с открытым кодом выяснил, что мое первое решение с [panel close]; вполне имеет право на жизнь так как встречал его во многих открытых программах. Также нашел еще несколько решений, а именно вызов метода performSelector:withObject:afterDelay: который запускает преданный ему метод селектор сразу после завершения метода beginSheetModalForWindow:completionHandler или вызов метода beginSheet:completionHandler который сам закрывает предшествующий ему sheet, а затем открывает свой.

Какой метод для закрытия всплывающих окон лучше сказать не могу - скорее это дело вкуса.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы