NSSavePanel: подавление "подтвердить замену?" диалог
В мире Nav Services можно указать kNavDontConfirmReplacement
как вариант для создания NavDialogRef
это не будет запрашивать у пользователя подтверждения замены файла при сохранении с именем файла, которое уже существует. Как мне указать эквивалентное поведение с Какао NSSavePanel
?
3 ответа
Вот как это можно сделать:
- Добавить делегата для обработки обратных вызовов NSSavePanel
- Override
- (NSString*)panel:(id)sender userEnteredFilename:(NSString*)filename confirmed:(BOOL)okFlag
в вашем делегате - В делегате:
- Если
okFlag
являетсяfalse
, вернутьfilename
- В противном случае сохранить
filename
какNSString*
в вашем делегате - Вернуть некоторую уникальную строку, которая вряд ли будет именем реального файла
- Если
- когда
NSSavePanel
возвращается к вашему коду, извлекает значение имени файла из вашего метода делегата и отбрасывает любое имя файлаNSSavePanel
сказал вам (которая должна быть вашей уникальной строкой).
поскольку userEnteredFilename:
вызывается операционной системой до того, как будет произведена проверка подтверждения-замены, она дает вам возможность получить то, что указал пользователь, не позволяя ОС вводить секрет. Уникальная строка гарантирует, что диалог подтверждения-замены не появится случайно.
Брутто, но эффективно.
Нет, нет простого способа сделать это с NSSavePanel. Теоретически вы можете расширить NSSavePanel категорией и переопределить некоторые частные методы. Я бросил быстрый взгляд, и в этом нет ничего простого.
Ваши клиенты будут ожидать точного уведомления о подтверждении, когда сталкиваются с NSSavePanel, поэтому не настраивайте его.
Я не уверен, какой вид настраиваемого диалогового окна подтверждения-перезаписи вы планируете, но могу ли я предложить вам вместо этого использовать NSOpenPanel и настроить это диалоговое окно с помощью кнопки "Создать новый файл"? (Я считаю, что вы можете сделать это через API setAccessoryView.)
Например, если вы просите своего клиента выбрать файл для добавления новых данных, NSOpenPanel будет работать достаточно хорошо; и если клиент хочет сохранить новые данные в новый файл (вместо добавления к существующему файлу), кнопка "Создать новый файл" - это просто дополнительный щелчок.