我在NSPrintPanel中添加了一个带有.addAccessoryController的自定义视图控制器--这很好。我可以更改属性,并且看到它们会影响打印视图,但只有通过更改纸张格式或布局来刷新视图。
一定有一种方法可以告诉NSPrintPanel刷新打印视图,我尝试了.needsDisplay = true,但没有成功
在文档中提到了实现keyPathsForValuesAffectingPreview,但我无法找到返回那里的方法。
发布于 2017-08-22 19:50:03
keyPathsForValuesAffectingPreview的实现方式与指定KVO依赖项的任何其他keyPathsForValuesAffecting<Foo>方法相同,唯一的例外是它是在实例上而不是在类型上声明的。有关声明KVO依赖项的更多信息,请参见文档中的以下页面:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/KeyValueObserving/Articles/KVODependentKeys.html
基本上,简单地说,您希望将一组关键路径返回到属性,当这些路径被更改时,应该会导致预览发生更改。在Swift中,目标C中没有一些额外的警告:
@objc属性标记。- For a stored property, add the `dynamic` keyword on the property declaration.
- For a computed property `foo`, add a static `keyPathsForValuesAffectingFoo` property listing its dependencies as a `Set` of `String`s.
例如,假设我有一个属性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属性,则将发送foo密钥路径的KVO通知,因为foo是动态的。接下来,将发送bar密钥路径的KVO通知,因为bar依赖于foo密钥路径。这反过来将导致您的预览更新,因为NSPrintPanel将监视我们从keyPathsForValuesAffectingPreview返回的bar关键路径。
https://stackoverflow.com/questions/45824826
复制相似问题