【问题标题】:Two way binding when setter is overriden覆盖设置器时的两种方式绑定
【发布时间】:2012-10-25 22:57:14
【问题描述】:

我有一个 NSTextField 绑定到某个对象的“缩放”属性。

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

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

如果我在文本字段中写“-5”,setZoom: 将被称为“-5”作为参数,_zoom 将被设置为 0。

那么问题是文本字段没有自我更新,它显示“-5”而不是重新读取它刚刚设置的属性值。

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

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

【问题讨论】:

    标签: cocoa properties key-value-observing


    【解决方案1】:

    你可以尝试这样做:

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

    【讨论】:

    • 这与使用 willChangeValueForKey/didChangeValueForKey 调用包装 _zoom =... 相同。这意味着它不起作用。
    猜你喜欢
    • 1970-01-01
    • 2016-10-01
    • 2016-02-27
    • 2017-09-05
    • 2014-02-13
    • 1970-01-01
    • 2012-01-14
    • 2017-03-26
    • 2017-08-04
    相关资源
    最近更新 更多