我使用/home/teammate/my-projects/Alpha/DM/
向NSPrintPanel添加了一个自定义视图控制器 - 这很好用。
我可以更改属性,但我发现它们会影响打印视图,但前提是我通过更改纸张格式或布局来刷新视图。
必须有办法告诉.addAccessoryController
刷新打印视图,我试过.needsDisplay = true没有运气
在documentation中提及实施NSPrintPanel
,但我无法确定是否会返回那里。
答案 0 :(得分:2)
keyPathsForValuesAffectingPreview
的实现方式与指定KVO依赖关系的任何其他keyPathsForValuesAffecting<Foo>
方法的实现方式相同,只是它在实例上而不是在类型上声明。有关声明KVO依赖关系的更多信息,请参阅文档中的此页面:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/KeyValueObserving/Articles/KVODependentKeys.html
基本上,简而言之,您希望返回一组属性的关键路径,当这些属性发生更改时,应该会导致预览发生变化。在Swift中,Objective-C中还有一些额外的警告:
所有相关媒体资源必须使用@objc
属性进行标记。
所涉及的所有属性必须符合KVO,这实际上意味着:
dynamic
关键字。foo
,添加一个静态keyPathsForValuesAffectingFoo
属性,将其依赖关系列为Set
的{{1}}。例如,假设我有一个属性String
,它是一个String。我还有一个属性foo
,其值来自bar
的值。如果foo
发生更改,我希望更改预览。我会写这样的代码:
bar
如果在上面的方案中更改了@objc dynamic var foo: String = "Foo"
@objc static let keyPathsForValuesAffectingBar: Set<String> = [#keyPath(foo)]
@objc var bar: String { return self.foo }
func keyPathsForValuesAffectingPreview() -> Set<String> { return [#keyPath(bar)] }
属性,则会发送foo
密钥路径的KVO通知,因为foo
是动态的。接下来,将发送foo
密钥路径的KVO通知,因为bar
依赖于bar
密钥路径。反过来,这会导致您的预览更新,因为NSPrintPanel将会关注我们从foo
返回的bar
密钥路径。