处理控件的输入,并更新所有伴随控件?

我正在制作一个小型的幻觉应用程序。 作为其中的一部分,我有一个表示角度的模型键(CGFloat)。

我有三个控件 - 一个NSTextField ,一个NSStepper和一个NSSlider - 每个绑定到该模型键。 ( NSTextField被创建为“带有数字格式化程序的文本字段”。)

我希望这个角度始终落在-45到45度之间。 我也希望它四舍五入到最接近的整数。

为此,我实现了一个应用这些规则的setAngle方法。 除了对输入进行四舍五入之外,它还会用最接近的有效值替换掉超出可接受范围的任何值。

我注意到,无论何时我使用其中一个控件来更改角度值,其他两个控件都会反映后处理值 - 但提交者本身不会。

例如,如果我移动滑块,文本字段会显示四舍五入的值,而不是滑块提交的可能小数值。

同样,如果我在文本字段中输入44.5,则滑块的位置对应于45。

但是,提交控件仍然显示它提交的“原始”值:最后一个示例中的文本字段继续阅读44.5。

配售

[self willChangeValueForKey:@"angle"];

[self didChangeValueForKey:@"angle"];

围绕setAngle中的代码实际更改该值对此没有影响。

那么我的主要问题是:

  • 一般来说,是否有一种“正确”的方式来改变控件提交的值,使得绑定到键的所有控件都获得更新的值? 我并不完全确定angleSet是适合我进行后处理模拟的地方,但我更不知道我该怎么做。 (Apple关于键值编码验证的文档明确表示不鼓励使用验证来达到此目的。)

  • 如果没有通用机制来设置模型键的调整版本,并在事件发生后通知所有相关控件,是否有办法确定进行实际设置的单个控件,并使用后处理值更新它?

  • 提前致谢!


    使用可可绑定是这种情况最容易的方法。 申报财产

    @property CGFloat  angle;
    

    并使用keypath角度或someobject.angle将它绑定到控件的值(这取决于您的实现)

    链接地址: http://www.djcxy.com/p/14931.html

    上一篇: process a control’s input, and update all attendant controls?

    下一篇: Taming NSTextField with bindings and formatter to behave properly