gpt4 book ai didi

objective-c - cocoa 打印: Make print request percolate up to window

转载 作者:行者123 更新时间:2023-12-03 17:15:33 25 4
gpt4 key购买 nike

我是 Cocoa 打印新手,正在尝试弄清楚如何利用内置 NSView打印。我没有在 IB 中编写任何代码或执行任何操作来启用打印,因此我只是将基本功能内置到所有 cocoa windows 中。

我的问题是,如果 NSTextField 之一窗口中的 s 具有焦点,当我按 Cmd-P 进行打印时,它会尝试仅打印该文本字段。我希望该文本字段忽略打印请求,以便它渗透到窗口。我还有一个NSTableView我希望同样的事情发生。如果选择了一行,我想要 NSTableView忽略打印​​请求,就像文本字段一样,它最终会向上传递到窗口(或窗口的 NSView 内容 View )。

帮忙?

最佳答案

您可以更改 Print... 菜单项设置为在主 nib 文件中调用的方法。默认情况下,它设置为调用第一响应者的 -print:。如果文本字段具有焦点,它将调用 print: ,这不是您想要的。

您可以在主 Controller 类中定义一个方法,例如 -printWindow:。然后更改 Print... 菜单项以调用第一响应者的 -printWindow: 方法。然后,在该方法中,您可以将 print: 发送到主窗口的内容 View 。代码看起来像这样:

.h:

@interface MDAppController : NSObject <NSApplicationDelegate> {
IBOutlet NSWindow *window;
}

- (IBAction)printWindow:(id)sender;

@end

.m:

@implementation MDAppController

- (IBAction)printWindow:(id)sender {
NSLog(@"[%@ %@]", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
[[window contentView] print:sender];
}

@end

显示此内容的示例项目:

http://www.markdouma.com/developer/PrintWindow.zip

关于您的评论,听起来好像在第二个窗口/第二个窗口 Controller 中,第二个窗口 Controller 不在响应者链中,而您的主窗口 Controller 在响应者链中。这可能有不同的原因。您的主窗口 Controller 是应用程序委托(delegate)吗?您可以尝试确保将第二个窗口 Controller 设置为其窗口的委托(delegate)。这应该有望将窗口 Controller 插入到响应者链中。否则,有关响应者链的更多信息,请参阅 Cocoa Event-Handling Guide: The Responder Chain .

关于objective-c - cocoa 打印: Make print request percolate up to window,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7681455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com