Print…
メニュー項目がメインnibファイルで呼び出すように設定されている方法を変更することができます。デフォルトでは、最初のレスポンダの-print:
を呼び出すように設定されています。フォーカスのあるテキストフィールドの場合、それはprint:
となります。これはあなたが望むものではありません。
代わりに、メインコントローラクラスに-printWindow:
などのメソッドを定義することができます。次に、Print ...メニュー項目を変更して、最初のレスポンダの-printWindow:
メソッドを呼び出します。この方法では、print:
をメインウィンドウのコンテンツビューに送信できます。コードは次のようになります:
.H:
@interface MDAppController : NSObject <NSApplicationDelegate> {
IBOutlet NSWindow *window;
}
- (IBAction)printWindow:(id)sender;
@end
.M:
@implementation MDAppController
- (IBAction)printWindow:(id)sender {
NSLog(@"[%@ %@]", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
[[window contentView] print:sender];
}
@end
サンプルプロジェクトこの示しています。あなたのコメントについて
http://www.markdouma.com/developer/PrintWindow.zip
、それは2番目のウィンドウ/ 2番目のウィンドウコントローラ、se condウィンドウコントローラがレスポンダチェインにあり、メインウィンドウコントローラがレスポンダチェインにあります。これはさまざまな理由が考えられます。メインウィンドウコントローラはアプリケーションを委任していますか? 2番目のウィンドウコントローラーがそのウィンドウのdelegate
に設定されていることを確認してください。うまくいけば、レスポンダチェーンにウィンドウコントローラを挿入する必要があります。それ以外の場合は、レスポンダチェーンの詳細についてはCocoa Event-Handling Guide: The Responder Chainを参照してください。
お返事ありがとうございます。 Printの代わりにprintWindow:セレクタを起動するためにPrintメニュー項目を変更しました。私は、プライマリウィンドウコントローラ上で-printWindow:メソッドを定義しましたが、うまくいきます。しかし、セカンダリウィンドウがあり、そのウィンドウにフォーカスがあると[印刷]メニューが無効になります。セカンダリウィンドウコントローラでprintWindow:を定義していますが。メニュー項目の自動検証は、2番目のウィンドウで印刷が無効になっている理由は何ですか? –
@ケニーワイランド:あなたのコメントに関する詳細情報を返しました... – NSGod
Brilliant!それは、私はウィンドウズの代理人がFile's Ownerに接続していなかったことです。ありがとう! –