处理控件的输入,并更新所有伴随控件?
我正在制作一个小型的幻觉应用程序。 作为其中的一部分,我有一个表示角度的模型键(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