将自定义视图打印到打印机的问题

时间:2014-10-26 21:44:06

标签: xcode cocoa printing nsview nsprintoperation

打印自定义视图时遇到困难 - 希望有人能指出我正确的方向。我已经读过每个Apple文档,但它只是不起作用。 我创建了一个简单的程序来测试打印,我将NSView(MainView)子类化,并将以下内容添加到drawRect方法中。

@implementation MainView


- (void)drawRect:(NSRect)dirtyRect{
  [super drawRect:dirtyRect];

  NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Hi"];

  [myString drawInRect:dirtyRect];

}

我在窗口上创建了一个自定义视图,并将它的类设置为MainView。

我运行程序并显示文本 - 到目前为止很好。

当我从下拉单击打印时,对话框打开,预览显示整个窗口 - 它包括带有最小,最大按钮的上方栏。那么,这是问题#1,为什么它只有整个窗口而不仅仅是视图?

其次,我在MainView中创建了一个打印例程,并将一个下拉菜单项链接到它。

-(IBAction) printTheView{

NSRect r = [self bounds];
[[NSPrintOperation printOperationWithView:self] runOperation];
[self dataWithPDFInsideRect:r];

}

这在打印预览中不会产生任何结果。我尝试了各种方法,没有任何工作(例如:NSSavePanel和beginSheetForDirectory ...方法)。上面的代码是我的最后一次尝试。

总之,我有两个问题: 1)为什么第一个打印整个窗口,而不仅仅是视图? 2)为什么我的自定义打印方法不起作用?

我已经成功打印了一个NSTextView,但是无法通过缝合来获得这个。任何建议/指点/踢将不胜感激。

谢谢。

[编辑] ------

我有部分工作。我通过NSObject将自定义视图绑定到printTheView方法。在IB中,我将下拉菜单项绑定到窗口上的自定义视图对象。这有效。

但是,我无法以相同的方式将窗口上的按钮绑定到打印方法 - 即CNTL CLICK并从按钮拖动到对象。

思想?

1 个答案:

答案 0 :(得分:1)

我通过创建一个单独的controller对象解决了这个问题。所以我有以下内容:

@interface ViewController : NSObject


@interface MainView  :  NSView

ViewController制作了MainView代理人,并在窗口上为自定义视图创建了IBOutlet

IBOutlet MainView *view;

将此打印方法添加到ViewController

-(IBAction)printToPDF:(id)sender{
[view printPDF];
}

在窗口中添加了一个按钮,并将其链接到ViewController中的printToPDF方法。

MainView中,添加了以下打印方法:

-(void)printPDF{
NSRect r = [self bounds];
[[NSPrintOperation printOperationWithView:self] runOperation];
[self dataWithPDFInsideRect:r];
}

这一切都有效。然而,剩下的问题是打印菜单项打印整个窗口与视图的原因。我把它放到一个单独的问题中。