Nav Servicesの世界では、既存のファイル名で保存するときにユーザーにファイルの置換を確認するように求めないkNavDontConfirmReplacement
を作成するオプションとして指定できます。NavDialogRef
Cocoaで同等の動作を指定するにはどうすればよいNSSavePanel
ですか?
3 に答える
方法は次のとおりです。
- NSSavePanelコールバックを処理するためのデリゲートを追加します
- (NSString*)panel:(id)sender userEnteredFilename:(NSString*)filename confirmed:(BOOL)okFlag
デリゲートでオーバーライド- 代表者の場合:
okFlag
の場合false
、filename
- それ以外の場合は、代理人
filename
として保持しますNSString*
- 実際のファイルの名前である可能性が非常に低い一意の文字列を返します
- コードに戻ったら
NSSavePanel
、デリゲートメソッドからfilenameの値を取得し、指定されたファイル名NSSavePanel
(一意の文字列)を破棄します。
交換確認チェックが行われる前にOSによって呼び出されるためuserEnteredFilename:
、OSを秘密にすることなく、ユーザーが指定したものを取得する機会が与えられます。一意の文字列により、確認-置換ダイアログが誤ってポップされないことが保証されます。
グロスだが効果的。
いいえ、NSSavePanelでこれを行う簡単な方法はありません。理論的には、NSSavePanelをカテゴリで拡張し、特定のプライベートメソッドをオーバーライドできます。しかし、私はざっと見てみましたが、それについて簡単なことは何もありません。
NSSavePanelに直面した場合、顧客は正確な確認アラートを期待するため、カスタマイズしないでください。
計画しているカスタマイズされた[上書きの確認]ダイアログの種類はわかりませんが、代わりにNSOpenPanelを使用し、[新しいファイルの作成]ボタンを使用してこのダイアログボックスをカスタマイズすることをお勧めしますか?(これは、setAccessoryView APIを介して実行できると思います。)
たとえば、新しいデータを追加するファイルを選択するように顧客に依頼している場合、NSOpenPanelは非常にうまく機能します。また、顧客が(既存のファイルに追加するのではなく)新しいデータを新しいファイルに保存したい場合は、[新しいファイルの作成]ボタンを追加クリックするだけです。