У меня есть NSOpenPanel, и я хочу сделать некоторую проверку выбора после того, как пользователь нажал OK. Мой код прост:
void (^openPanelHandler)(NSInteger) = ^(NSInteger returnCode) {
if (returnCode == NSFileHandlingPanelOKButton) {
// do my validation
[self presentError:error]; // uh oh, something bad happened
}
}
[openPanel beginSheetModalForWindow:[self window]
completionHandler:openPanelHandler];
[self window]
- модальное окно приложения. Панель открывается как лист. Все идет нормально.
В документации Apple говорится, что обработчик завершения должен вызываться «после того, как пользователь закрыл панель». Но в моем случае он вызывается сразу после нажатия кнопки «ОК / Отмена», а не после закрытия панели. Это приводит к тому, что предупреждение об ошибке открывается над открытой панелью, а не после закрытия панели. Это все еще работает, но это не похоже на Mac.
Я бы предпочел, чтобы пользователь щелкнул ОК, чтобы открыть лист панели, чтобы сложить, , а затем , чтобы появилось окно с предупреждением.
Полагаю, я мог бы представить предупреждение с помощью отложенного селектора, но это похоже на взлом.