NSSavePanel: подавление "подтвердить заменить?" диалог - PullRequest
3 голосов
/ 18 декабря 2009

В мире Nav Services можно указать kNavDontConfirmReplacement как параметр для создания NavDialogRef, который не будет запрашивать у пользователя подтверждения замены файла при сохранении с именем файла, которое уже существует. Как мне указать эквивалентное поведение с Какао NSSavePanel?

Ответы [ 3 ]

4 голосов
/ 06 марта 2010

Вот как это можно сделать:

  1. Добавление делегата для обработки обратных вызовов NSSavePanel
  2. Переопределить - (NSString*)panel:(id)sender userEnteredFilename:(NSString*)filename confirmed:(BOOL)okFlag в вашем делегате
  3. у делегата:
    1. Если okFlag равно false, вернуть filename
    2. В противном случае оставьте filename как NSString* в вашем делегате
    3. Возвращает некоторую уникальную строку, которая вряд ли будет именем фактического файла
  4. Когда NSSavePanel возвращается к вашему коду, извлеките значение имени файла из вашего метода делегата и отбросьте любое имя файла NSSavePanel, которое вам было сказано (это должна быть ваша уникальная строка).

Поскольку ОС вызывает userEnteredFilename: до того, как будет выполнена проверка подтверждения-замены, это дает вам возможность получить то, что указал пользователь, не позволяя ОС вводить секрет. Уникальная строка гарантирует, что диалоговое окно подтверждения-замены не появится случайно.

Брутто, но эффективно.

0 голосов
/ 22 декабря 2009

Ваши клиенты будут ожидать точного уведомления о подтверждении, когда сталкиваются с NSSavePanel, поэтому не настраивайте его.

Я не уверен, какой тип настраиваемого диалога подтверждения-перезаписи вы планируете, но могу ли я предложить вам вместо этого использовать NSOpenPanel и настроить это диалоговое окно с помощью кнопки «Создать новый файл»? (Я считаю, что вы можете сделать это через API setAccessoryView.)

Например, если вы просите своего клиента выбрать файл для добавления новых данных, NSOpenPanel будет работать достаточно хорошо; и если клиент хочет сохранить новые данные в новом файле (вместо добавления к существующему файлу), кнопка «Создать новый файл» - это просто дополнительный щелчок.

0 голосов
/ 21 декабря 2009

Нет, нет простого способа сделать это с NSSavePanel.Теоретически вы можете расширить NSSavePanel категорией и переопределить некоторые частные методы.Я бросил быстрый взгляд, и в этом нет ничего простого.

...