• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

在NSView内部调用`print`会打开打印对话框

macos 来源:Morgan Wilde 7次浏览

这是奇怪的。我有一个简单的故事板占位符,其GridView为类名称属性。在NSView内部调用`print`会打开打印对话框

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 dialog

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


===========解决方案如下:

调用print()做了一些不同的事情 – 更确切地说:如你所期望的那样。它调用NSView‘s print(sender: AnyObject?)而不是记录打印。你可以认为这是一个错误,或者至少是一个意想不到的行为,因为Swift.print(...)通常更多使用。

此操作方法打开“打印”面板,如果用户选择除取消之外的选项,则将接收器及其所有子视图打印到“打印”面板中指定的设备。

看看this post in the apple dev forum。

事实上,它不是一个错误,因为调用print在当前上下文中“更接近”当然是正确的方法。调用父母的print比调用一些任意的其他print更合理。只有通常使用其他打印的事实是令人困惑的地方,因为一般来说,您不必担心日志记录print所处的范围 – 它只是起作用。如果你想另一种方式,并想要使用父母的打印print这将是一个lot更混乱,必须明确说明您要使用父母print而不是Swift.print(...)

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


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)