加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

macos – 在NSView中调用`print`打开打印对话框

发布时间:2020-12-14 05:49:48 所属栏目:百科 来源:网络整理
导读:这很奇怪。我有一个简单的故事板占位符和GridView的类名属性。 class GridView: NSView { required init?(coder: NSCoder) { super.init(coder: coder) print("coder: (coder)") } override func drawRect(dirtyRect: NSRect) { let rect = NSBezierPath(re
这很奇怪。我有一个简单的故事板占位符和GridView的类名属性。
class GridView: NSView {

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        print("coder: (coder)")
    }

    override func drawRect(dirtyRect: NSRect) {
        let rect = NSBezierPath(rect: dirtyRect)
        NSColor.redColor().setFill()
        rect.fill()
    }
}

这只是在实现drawRect时按预期工作,但在我添加初始化程序后,每次运行应用程序时它都会开始打开打印对话框。

为什么会发生这种情况?如何为自定义视图正确重新实现故事板初始化器?

调用print()会做一些不同的事情 – 更确切地说:就像你期望的那样不同。它调用 NSView‘s print(sender: AnyObject?)而不是日志打印。您可以将此视为一个错误或至少是非常意外的行为,因为Swift.print(…)通常使用得更多。

This action method opens the Print panel,and if the user chooses an option other than canceling,prints the receiver and all its subviews to the device specified in the Print panel.

看看this post in the apple dev forum。

事实上,这不是一个错误,因为调用当前上下文中“更接近”的打印肯定是正确的方法。调用父母的印刷品比调用一些任意的其他印刷品更合理。只有您通常使用其他打印件的事实才是令人困惑的事实,因为一般情况下您不必担心日志打印所在的范围 – 它只是起作用。如果您认为反过来并且想要使用父级的打印打印,那么必须明确声明您要使用parent print而不是Swift.print(…)会更加困惑。

唯一的“解决方案”是为这两个函数使用不同的名称,这可能不会发生。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读