重写setter时的双向绑定

时间:2012-10-25 22:57:14

标签: cocoa properties key-value-observing

我有一个绑定到某个对象的NSTextField" zoom"属性。

在这个对象的类实现中,我有以下

- (void)setZoom:(CGFloat)zoom
{
    _zoom = MAX(0, MIN(10, zoom));
}

如果我写" -5"在文本字段中,setZoom:将使用" -5"作为参数,_zoom将设置为0。

然后问题是文本字段没有自我更新,它显示" -5"而不是重新阅读它刚刚设定的属性值。

如果我在代码中执行myObject.zoom = -5;,则文本字段将正确显示0。

我试图在willChangeValueForKey / didChangeValueForKey调用中包装_zoom = ...但它没有改变任何东西。

1 个答案:

答案 0 :(得分:1)

您可以尝试这样做:

- (void)setZoom:(CGFloat)zoom
{
    CGFloat corectedValue = MAX(0, MIN(10, zoom));
    if (zoom != corectedValue)
    {
        [self setZoom:correctedValue];
    } else {
        _zoom = zoom;
    }
}