打印自定义视图时遇到困难 - 希望有人能指出我正确的方向。我已经读过每个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并从按钮拖动到对象。
思想?
答案 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];
}
这一切都有效。然而,剩下的问题是打印菜单项打印整个窗口与视图的原因。我把它放到一个单独的问题中。