【问题标题】:How to change the value of an item when other item changes in NSTableView?NSTableView中其他item发生变化时如何改变item的值?
【发布时间】:2014-04-21 17:19:13
【问题描述】:
【问题讨论】:
标签:
objective-c
cocoa
binding
nstableview
nsarraycontroller
【解决方案1】:
只需覆盖每个高度和宽度的设置器并更改另一个值。
换句话说,如果高度和宽度都是同一个对象的属性,则让setHeight调用setWidth等。
最简单的方法是,如果您有第三个属性来反映您希望高度和宽度具有的关系,例如aspectRatio。
除了覆盖设置器之外,如果您想根据之前的高度或宽度值进行计算,您可以使用options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) 和observeValueForKeyPath 在两个键路径中注册 KVO 更改,您会得到更改包含旧值和新值的字典,您可以从中计算用户缩放该值的程度并相应地缩放另一个值(同时小心避免在这样做时触发 KVO)。请参阅 KVO 编程指南中的 registering for KVO observing。但是 KVO 更难并且容易出错,所以我会避免它并通过覆盖设置器来保持数据模型的一致性。