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

在此对象的类实现中,我具有以下内容

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


如果我在文本字段中输入“ -5”,则将使用“ -5”作为参数调用setZoom:,并将_zoom设置为0。

然后的问题是,文本字段不会自动更新,而是显示“ -5”,而不是重新读取刚刚设置的属性值。

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

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

最佳答案

您可以尝试通过以下方式进行操作:

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

10-08 15:17
查看更多