【问题标题】:macOS Printing in SwiftSwift 中的 macOS 打印
【发布时间】:2017-03-21 15:05:11
【问题描述】:

请注意,这不是 iOS 问题。

我有一个基于 NSView 的应用程序(即不是基于文档的),我想加入一个打印子系统。我可以在我的主控制器中获取 NSViews 以正常打印。但是,我想要一个专门为打印而构建的特殊视图。该视图不应显示在应用程序的窗口中。该视图包含两个 NSTextField、两个 NSTextView 和 5 个标签。

我似乎想不出办法来做到这一点。我尝试了这些示例的各种形式:

  1. 将 NSView 添加到我的主视图窗口?看起来合乎逻辑,但在情节提要中很尴尬,(我无法在情节提要中定位视图)。

  2. 使用 xib 以编程方式创建自定义 NSView?

为此,我已经尝试过:

@IBOutlet weak var printView: NSView!
….
let printOperation = NSPrintOperation(view: printView!)

这会导致全面的“致命错误:在展开可选值时意外发现 nil”消息。

插座配置正确(我认为)

  1. 单独的 ViewController?如果是这样,我怎样才能避免有两个打印按钮 - 一个调用打印控制器,第二个打印 PrintController 的视图。

我尝试阅读 Apple 文档,但它们并不是我学习的最佳方式。我在 Swift 中也没有找到 Print 文档。我已经解决了许多 SE 问题,但都是空白。请您指点我的解决方案。

【问题讨论】:

  • 谢谢埃里克。但是,如果我需要稍微复杂一点的布局(六个字段和标签)怎么办?我应该在我的问题中这么说。
  • 不客气,不幸的是,我无法提供进一步的帮助,我对在 Mac 上打印的知识到此为止。让我们希望有人能找到解决方案。当然,请在您的问题中添加所有必要的详细信息。 :)
  • 会做的,再次感谢。

标签: macos printing swift3


【解决方案1】:

我认为这里的具体问题是您永远不会导致视图被加载。

您可以通过覆盖控制器上的viewDidLoad 方法来仔细检查是否是这种情况。如果它从未被调用,则永远不会从 nib 加载您的视图。

通常,当您显示视图控制器时,UI 机制会处理所有这些,这就是为什么当它不发生时会如此混乱的原因。

您应该能够通过访问控制器上的视图属性来触发视图加载。例如

_ = self.view // Touch the view to force it to load

https://developer.apple.com/documentation/appkit/nsviewcontroller/1434401-view 有一些额外的信息。

您也可以直接致电loadView(),尽管这通常是不受欢迎的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多