4 Stimmen

NSSavePanel: Unterdrückung des "Ersetzen bestätigen?"-Dialogs

In der Welt der Nav Services könnte man angeben kNavDontConfirmReplacement als Option zur Erstellung einer NavDialogRef die den Benutzer nicht mehr auffordert, das Ersetzen einer Datei zu bestätigen, wenn sie unter einem bereits vorhandenen Dateinamen gespeichert wird. Wie kann ich ein gleichwertiges Verhalten mit der Cocoa NSSavePanel ?

4voto

fbrereto Punkte 34770

So kann man es machen:

  1. Hinzufügen eines Delegaten für die Bearbeitung von NSSavePanel-Callbacks
  2. Überschreiben Sie - (NSString*)panel:(id)sender userEnteredFilename:(NSString*)filename confirmed:(BOOL)okFlag in Ihrem Delegierten
  3. Im Abgeordneten:
    1. Wenn okFlag es false Rückkehr filename
    2. Andernfalls behalten Sie filename als NSString* in Ihrem Delegierten
    3. Gibt eine eindeutige Zeichenfolge zurück, bei der es höchst unwahrscheinlich ist, dass es sich um den Namen einer tatsächlichen Datei handelt
  4. Cuando NSSavePanel zu Ihrem Code zurückkehrt, ziehen Sie den Wert von filename aus Ihrer Delegatenmethode und verwerfen Sie den Dateinamen NSSavePanel (die Ihre eindeutige Zeichenfolge sein sollte).

Seit userEnteredFilename: vom Betriebssystem vor der Überprüfung des Ersetzens aufgerufen wird, haben Sie die Möglichkeit, das zu bekommen, was der Benutzer angegeben hat, ohne das Betriebssystem in das Geheimnis einzuweihen. Die eindeutige Zeichenfolge stellt sicher, dass der Dialog zum Bestätigen des Ersetzens nicht versehentlich aufgerufen wird.

Grob, aber wirkungsvoll.

0voto

Ken Aspeslagh Punkte 11374

Nein, es gibt keine einfache Möglichkeit, dies mit NSSavePanel zu tun. Theoretisch könnte man NSSavePanel um eine Kategorie erweitern und bestimmte private Methoden außer Kraft setzen. Ich habe einen kurzen Blick darauf geworfen, und es ist nicht einfach.

0voto

Heng-Cheong Leong Punkte 814

Ihre Kunden werden genau diese Bestätigungsmeldung erwarten, wenn sie mit einem NSSavePanel konfrontiert werden, also passen Sie es nicht an.

Ich bin mir nicht sicher, welche Art von angepasstem Überschreibbestätigungsdialog Sie planen, aber ich schlage vor, dass Sie stattdessen ein NSOpenPanel verwenden und dieses Dialogfeld mit einer Schaltfläche "Neue Datei erstellen" anpassen (ich glaube, Sie können dies über die setAccessoryView API tun).

Wenn Sie Ihren Kunden zum Beispiel bitten, eine Datei auszuwählen, an die neue Daten angehängt werden sollen, funktioniert das NSOpenPanel sehr gut; und wenn der Kunde die neuen Daten in einer neuen Datei speichern möchte (anstatt sie an eine bestehende Datei anzuhängen), ist die Schaltfläche "Neue Datei erstellen" nur ein zusätzlicher Klick.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X