1

正在打印自定义视图,我遇到了困难 - 希望有人能指出我正确的方向。我已经阅读了所有 Apple 文档的上方,但它只是无法正常工作。我创建了一个简单的程序来测试打印,我继承了 NSView (MainView) 并将以下内容添加到 drawRect 方法中。

@implementation MainView


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

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

  [myString drawInRect:dirtyRect];

}

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

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

当我从下拉菜单中单击打印时,对话框打开并且预览显示整个窗口 - 它包括带有最小、最大按钮的上栏。所以,这是第一个问题,为什么它有整个窗口而不是视图?

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

-(IBAction) printTheView{

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

}

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

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

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

谢谢你。

[编辑] - - -

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

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

想法?

4

1 回答 1

1

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

@interface ViewController : NSObject


@interface MainView  :  NSView

为窗口上的自定义视图创建了ViewController一个委托MainView并创建了一个。IBOutlet

IBOutlet MainView *view;

将此打印方法添加到ViewController

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

在窗口中添加了一个按钮并将其链接到ViewController.

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

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

这一切都有效。然而剩下的问题是为什么打印菜单项打印整个窗口与视图。我已经把它放在一个单独的问题中。

于 2014-10-28T15:57:06.157 回答