1

オブジェクトの「ズーム」プロパティにバインドされた NSTextField があります。

このオブジェクトのクラス実装には、次のものがあります

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

テキストフィールドに「-5」と書くsetZoom:と、「-5」を引数として が呼び出され、_zoom が 0 に設定されます。

問題は、テキストフィールド自体が更新されず、設定したばかりのプロパティ値を再読み取りする代わりに「-5」が表示されることです。

コードで行うmyObject.zoom = -5;と、テキスト フィールドに 0 が正しく表示されます。

_zoom =... を willChangeValueForKey/didChangeValueForKey 呼び出し内にラップしようとしましたが、何も変わりませんでした。

4

1 に答える 1

1

あなたはそのような方法でやろうとすることができます:

- (void)setZoom:(CGFloat)zoom
{
    CGFloat corectedValue = MAX(0, MIN(10, zoom));
    if (zoom != corectedValue)
    {
        [self setZoom:correctedValue];
    } else {
        _zoom = zoom;
    }
}
于 2012-10-26T17:34:16.477 に答える