macOS 中的 Swift 打印

标签 macos printing swift3

请注意,这不是 iOS 问题。

我有一个基于 NSView 的应用程序(即不是基于文档的),并且我想安装一个打印子系统。我可以在我的主 Controller 中获取 NSViews 来打印。但是,我想要构建一个专门用于打印的特殊 View 。该 View 不应显示在应用程序的窗口中。该 View 包含两个 NSTextField、两个 NSTextView 和 5 个标签。

我似乎无法找到一种方法来做到这一点。我尝试过这些示例的各种形式:

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

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

为此,我尝试过:

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

这会导致全面的“ fatal error :在解包可选值时意外发现 nil”消息。

socket 配置正确(我认为)

  • 一个单独的 ViewController?如果是这样,我怎样才能避免使用两个打印按钮——一个用于调用打印 Controller ,第二个用于打印 PrintController 的 View 。
  • 我尝试过阅读 Apple 文档,但它们不是我最好的学习方式。我还没有发现 Swift 中的打印文档。我已经解决了很多 SE 问题,但一无所获。请您给我指出一个解决方案。

    最佳答案

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

    您可以通过重写 Controller 上的 viewDidLoad 方法来仔细检查是否是这种情况。如果它从未被调用,则您的 View 永远不会从 Nib 加载。

    通常,当您显示 View Controller 时,UI 机制会处理所有这些事情,这就是为什么当它不发生时它会如此令人困惑。

    您应该能够通过访问 Controller 上的 View 属性来触发 View 加载。例如

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

    https://developer.apple.com/documentation/appkit/nsviewcontroller/1434401-view有一些附加信息。

    您也可以直接调用loadView(),尽管这通常不受欢迎。

    关于macOS 中的 Swift 打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42930873/

    相关文章:

    macos - C++、OS X 的 clang 与 GCC 中的 Lambda 表达式

    objective-c - 可以在 Cocoa 中创建没有按钮的 NSAlert

    java - 调试历史记录的 Eclipse OS X 快捷方式

    ios - SOAP API 正在响应可选括号中的 XML。如何迎合它?

    ios - fetchedResultsController 不过滤 (fetchRequest)

    c - 在 C、MacOS 中播放提示音

    sockets - 通过TCP套接字将ASCII文本发送到RAW打印机

    css - 我可以使用其所有 css 功能制作一个与其普通 View 相同的可打印网页吗?

    html - CSS @media print withinch 打印后给出其他尺寸

    iOS - 在 scaleaspectfit UIImageView 的图像上布局 UIImageView 的 subview