当setter被覆盖时,双向绑定
我有一个NSTextField绑定到一些对象的“缩放”属性。
在这个对象的类实现中,我有以下几点
- (void)setZoom:(CGFloat)zoom
{
_zoom = MAX(0, MIN(10, zoom));
}
如果我在文本字段中输入“-5”, setZoom:
将以“-5”作为参数调用,_zoom将被设置为0。
然后问题是textfield没有自行更新,它显示“-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;
}
}
链接地址: http://www.djcxy.com/p/85275.html