Cocoa 打印是打印整个窗口,而不是视图

Cocoa 打印是打印整个窗口,而不是视图,cocoa,Cocoa,我有一个简单的程序,以确保打印工作 -控制器的子类NSObject,ViewController -子类NSView,View 将自定义视图添加到窗口,将“类”设置为“视图” 使视图控制器成为视图的委托。 在IB中添加对象,将类设置为ViewController 将IBOutlet添加到ViewController的委派部分,将其连接到窗口上的自定义视图 在视图中,有一个简单的[mystringdrawinrect:rect],其中myString在init中定义为@Hi 当我运行时,程序在视图

我有一个简单的程序,以确保打印工作

-控制器的子类NSObject,ViewController

-子类NSView,View

将自定义视图添加到窗口,将“类”设置为“视图”

使视图控制器成为视图的委托。 在IB中添加对象,将类设置为ViewController

将IBOutlet添加到ViewController的委派部分,将其连接到窗口上的自定义视图

在视图中,有一个简单的[mystringdrawinrect:rect],其中myString在init中定义为@Hi

当我运行时,程序在视图中打印Hi。单击“打印”菜单项时,“打印预览”将显示整个窗口

更多:我有一个没有打印代码的早期测试程序,我运行它,打印预览只显示视图。我已经通过了这两个代码,找不到区别,所以我不明白为什么一个工作而另一个不工作

你们知道为什么打印预览会显示整个窗口而不是视图吗

[编辑]--- 我还创建了一个非常简单的程序来检查和处理相同的问题。 子类NSView,MainView 将自定义视图添加到窗口,将类设置为MainView 增加了[str drawInRect:dirtyRect with attributes:nil]; 笔记NSString*str=@Hello

[更多信息]----

我向NSView对象添加了如下打印方法:

将按钮添加到窗口,并将其链接到ViewController中的iAction方法:

在ViewController中,我有:


这管用!那么,为什么默认的“打印”菜单项会打印整个窗口呢?

默认情况下,您不必编写任何打印代码,打印工作正常。但是,它提供了默认行为,即打印整个窗口


如果您想要自定义打印行为,您必须编写自己的打印方法。就像您在极其简单的程序中所做的那样。您还可以将默认的打印菜单项链接到您自己的打印方法。

哇,我忘了这个问题仍然处于活动状态,没有答案,我放弃了任何回复。感谢您的回复,我的解决方案正是您所建议的——我创建了一个自定义打印方法,并将打印菜单项链接到自定义方法。
-(void)printPDF{
NSRect r = [self bounds];
[[NSPrintOperation printOperationWithView:self] runOperation];
[self dataWithPDFInsideRect:r];
}
-(IBAction)printToPDF:(id)sender{
  [view printPDF];
}
IBOutlet View *view;