我有一个带有两个 NSTextField 控件的窗口,它们的值必须彼此保持同步。具体来说,一个是宽度,另一个是长度,它们的比例应该保持等于给定的纵横比。我希望用户能够设置他们喜欢的任何一个并自动进行其他更新。
我的第一种方法:我将两个控件中的每一个的委托设置为窗口控制器。我实现了 controlTextDidEndEditing 方法。我检查发件人。如果是宽度字段,我会计算高度字段并通过绑定属性 (self.my_height = self.my_width/aspectRatio) 更新其值。同样,如果是高度字段,(self.my_width = self.my_height*aspectRatio)。
但我遇到了障碍。假设纵横比为 1.5。用户在宽度字段中输入 100,然后转到另一个字段。高度字段更新为 66(无论好坏,我选择始终向下舍入)。用户点击高度字段,不做任何改变,然后点击其他地方。宽度字段更新为 99。用户现在正在挠头。
我的细化。我还在窗口控制器中实现了 controlTextDidChange 方法。所有这一切都是将静态(文件范围)BOOL 变量 (gTextFieldDidChange) 设置为 YES。现在,当我进入 controlTextDidEndEditing 时,我检查 gTextFieldDidChange 的状态。如果否,那么我立即返回。如果是,那么我将 gTextFieldDidChange 清除回 NO 并处理长度/宽度更新。
这对我来说似乎没有任何问题,但它似乎相当“后门”。我缺少一种更清洁/更智能的方法吗?
感谢您的任何/所有建议。麦克风