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
?
Antworten
Zu viele Anzeigen?So kann man es machen:
- Hinzufügen eines Delegaten für die Bearbeitung von NSSavePanel-Callbacks
- Überschreiben Sie
- (NSString*)panel:(id)sender userEnteredFilename:(NSString*)filename confirmed:(BOOL)okFlag
in Ihrem Delegierten - Im Abgeordneten:
- Wenn
okFlag
esfalse
Rückkehrfilename
- Andernfalls behalten Sie
filename
alsNSString*
in Ihrem Delegierten - Gibt eine eindeutige Zeichenfolge zurück, bei der es höchst unwahrscheinlich ist, dass es sich um den Namen einer tatsächlichen Datei handelt
- Wenn
- Cuando
NSSavePanel
zu Ihrem Code zurückkehrt, ziehen Sie den Wert von filename aus Ihrer Delegatenmethode und verwerfen Sie den DateinamenNSSavePanel
(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.
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.