[英]Cocoa Printing: Make print request percolate up to window
我是Cocoa印刷的新手,試圖弄清楚如何利用內置的NSView
印刷。 我沒有在IB中編寫任何代碼或做任何事情來啟用打印功能,所以我剛剛在所有可可窗口中都內置了基本功能。
我的問題是,如果窗口中的NSTextField
之一具有焦點,當我按Cmd-P進行打印時,它將嘗試僅打印該文本字段。 我希望該文本字段忽略打印請求,以便它可以滲透到窗口中。 我也有一個NSTableView
,我也希望如此。 如果選擇了一行,我希望NSTableView
忽略打印請求,因此,就像文本字段一樣,它將最終向上傳遞到窗口(或窗口的NSView
內容視圖)。
救命?
您可以更改設置“ Print…
菜單項以在主nib文件中調用的方法。 默認情況下,它被設置為調用第一響應者的-print:
如果文本字段具有焦點,它將在該字段上調用print:
這不是您想要的。
您可以改為在主控制器類中定義-printWindow:
類的方法。 然后將“打印…”菜單項更改為調用第一個響應程序的-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
關於您的評論,聽起來好像在第二個窗口/第二個窗口控制器中,第二個窗口控制器不在響應者鏈中,而您的主窗口控制器在響應者鏈中。 這可能是由於不同的原因。 您的主窗口控制器是應用程序委托嗎? 您可以嘗試確保將第二個窗口控制器設置為其窗口的delegate
。 希望這應該將窗口控制器插入響應者鏈。 否則,有關響應者鏈的更多信息,請參見《 可可事件處理指南:響應者鏈》 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.