正在打印自定义 View ,我遇到了困难 - 希望有人能给我指出正确的方向。我已经阅读了所有苹果文档,但它不起作用。 我创建了一个简单的程序来测试打印,我对 NSView (MainView) 进行了子类化,并将以下内容添加到了 drawRect 方法中。
@implementation MainView
- (void)drawRect:(NSRect)dirtyRect{
[super drawRect:dirtyRect];
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Hi"];
[myString drawInRect:dirtyRect];
}
我在窗口上创建了一个自定义 View 并将其类设置为 MainView。
我运行该程序并显示文本 - 到目前为止效果良好。
当我从下拉列表中单击打印时,对话框将打开,预览将显示整个窗口 - 它包括带有最小、最大按钮的上部栏。所以,这是问题#1,为什么它有整个窗口而不是只有 View ?
其次,我在 MainView 中创建了一个打印例程,并将一个下拉菜单项链接到它。
-(IBAction) printTheView{
NSRect r = [self bounds];
[[NSPrintOperation printOperationWithView:self] runOperation];
[self dataWithPDFInsideRect:r];
}
这不会在打印预览中产生任何结果。我尝试了各种方法,但没有任何效果(例如: NSSavePanel 和 beginSheetForDirectory... 方法)。上面的代码是我最后一次尝试。
总而言之,我有两个问题: 1)为什么第一个打印整个窗口,而不是仅打印 View ? 2) 为什么我的自定义打印方法不起作用?
我已经成功打印了一个 NSTextView,但无法获取这个。任何建议/指示/踢将不胜感激。
谢谢。
[编辑]------
我已经部分工作了。我通过 NSObject 将自定义 View 绑定(bind)到 printTheView 方法。在 IB 中,我将下拉菜单项绑定(bind)到窗口上的自定义 View 对象。这有效。
但是,我无法以相同的方式将窗口上的按钮绑定(bind)到打印方法 - 即 CNTL CLICK 并从按钮拖动到对象。
想法?
最佳答案
我通过创建一个单独的 Controller
对象解决了这个问题。所以我有以下内容:
@interface ViewController : NSObject
@interface MainView : NSView
使 ViewController
成为 MainView
的委托(delegate),并为窗口上的自定义 View 创建一个 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];
}
这一切都有效。然而,剩下的问题是为什么打印菜单项打印整个窗口而不是 View 。我已将其放入一个单独的问题中。
关于xcode - 将自定义 View 打印到打印机时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26578318/