【问题标题】:Print panel accessory view shows in OS X 10.11, but not in 10.10 and 10.9打印面板附件视图在 OS X 10.11 中显示,但在 10.10 和 10.9 中不显示
【发布时间】:2018-03-26 11:08:26
【问题描述】:

我的 OS X 应用支持 10.9 - 10.11。我尝试通过添加这样的打印附件视图来为打印操作添加一些选项:

MyPrintView *printView = [[MyPrintView alloc] initWithData: [self myData]];
NSPrintOperation *printOperation = [NSPrintOperation printOperationWithView: printView];
NSPrintPanel *printPanel = [printOperation printPanel];
[printPanel addAccessoryController:[[MyPrintAccessory alloc] init]];
if (printOperation)
{
    [printOperation runOperationModalForWindow:_window delegate:_window didRunSelector:nil contextInfo:nil];
}

附件视图由控制器定义

@interface MyPrintAccessory : NSViewController <NSPrintPanelAccessorizing>

以及在 xib 文件中定义的视图。

在 El Capitan 中一切正常,但在 Yosemite 和 Mavericks 中,打印面板让我在弹出按钮中选择我的配件,如果我选择它,则不会显示任何内容,应该显示附件视图的空间仍然是空的。在编译和运行时都不会生成错误消息。

有没有人提示如何解决这个问题,或者提示如何寻找这种行为的原因?

【问题讨论】:

  • 当您说“在编译和运行时都不会生成错误消息”时,是否包括使用 Console.app 查看系统日志?
  • 是的,Console.app 上也没有消息。

标签: macos cocoa nsviewcontroller nsprintpanel


【解决方案1】:

我遇到了同样的问题。我通过将选项“使用自动布局”设置为关闭我的打印附件视图笔尖文件来解决它。

【讨论】:

    【解决方案2】:

    我的应用程序做同样的事情,并在 10.10 中工作

    略有不同,但要引言: 我的应用程序是一个基于NSDocument 的应用程序。 打印时,我从NSDocument 中获取NSPrintInfo,并将其提供给我的打印方法(您嵌入在问题中的代码)

    看起来像这样:

    [printView requestPrintWithPrintInfo:[doc printInfo]];
    

    然后,我不调用-printOperationWithView:,而是调用-printOperationWithView:printInfo:,然后传递来自发件人的printInfo

    根据 Apple 的文档,您应该在以下情况下致电 -printOperationWithView

    /* 稍微方便,当应用程序的全局 NSPrintInfo 合适时使用。这些方法中的每一个都会调用 [NSPrintInfo sharedPrintInfo],然后调用上面列出的同名方法。

    在我看来,无论如何它应该可以工作,但就像我说的那样,这似乎是我们代码中唯一的区别

    【讨论】:

    • 您是否调查过 nib/xib 是否正确加载?因为我认为在 10.10 之前,您必须通过 (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)bundle 显式命名它,或者相应地覆盖 NSViewController 子类中的初始化程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多