2014-10-26 73 views
1

处理打印自定义视图和我遇到困难 - 希望有人能指出我正确的方向。我已经读过每个苹果文档,但它不工作。 我创建了一个简单的程序来测试打印,我subclassed 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中,我将下拉菜单项绑定到窗口上的Custom View对象。这工作。但是,我不能以同样的方式将窗口上的按钮绑定到打印方法 - 即CNTL单击并从按钮拖动到对象。

想法?

回答

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]; 
} 

这一切工作。然而,剩下的问题是为什么打印菜单项打印整个窗口与视图。我已经把它写入一个单独的问题。