2012-10-25 33 views
1

我有一个绑定到某个对象“zoom”属性的NSTextField。setter被覆盖时的双向绑定

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

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

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

然后问题是textfield没有自行更新,它显示“-5”而不是重新读取它刚才设置的属性值。

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

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

回答

1

你可以尝试这样的方式来做到:

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

这是一样的包装_zoom = ...与willChangeValueForKey/didChangeValueForKey电话。这意味着它不起作用。 –