2011-10-06 15 views
1

私はココア印刷が初めてで、組み込みのNSView印刷を利用する方法を理解しようとしています。私は印刷を可能にするためにコードを書いたりIBで何もしていないので、基本的な機能はすべてのココアのウィンドウに組み込まれています。ココア印刷:印刷依頼を窓口まで寄せてください

私の問題は、ウィンドウ内のNSTextFieldのいずれかにフォーカスがある場合、印刷するためにCmd-Pを押すと、そのテキストフィールドだけを印刷しようとします。私はそのテキストフィールドが印刷要求を無視して、それがウィンドウまで浸透するようにしたいと思います。私もNSTableViewを持っていて、同じことが起こりたいと思います。行が選択されている場合は、NSTableViewが印刷要求を無視するようにしたいのですが、テキストフィールドと同様に、最終的にウィンドウ(またはウィンドウのNSViewコンテンツビュー)に上方向に渡されます。

ヘルプ?

答えて

1

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を参照してください。

+0

お返事ありがとうございます。 Printの代わりにprintWindow:セレクタを起動するためにPrintメニュー項目を変更しました。私は、プライマリウィンドウコントローラ上で-printWindow:メソッドを定義しましたが、うまくいきます。しかし、セカンダリウィンドウがあり、そのウィンドウにフォーカスがあると[印刷]メニューが無効になります。セカンダリウィンドウコントローラでprintWindow:を定義していますが。メニュー項目の自動検証は、2番目のウィンドウで印刷が無効になっている理由は何ですか? –

+0

@ケニーワイランド:あなたのコメントに関する詳細情報を返しました... – NSGod

+0

Brilliant!それは、私はウィンドウズの代理人がFile's Ownerに接続していなかったことです。ありがとう! –

関連する問題