【问题标题】:Cocoa textbox to update variable可可文本框更新变量
【发布时间】:2013-01-29 16:04:05
【问题描述】:

我有一个带有数字格式化程序的文本字段,它绑定到一个带有 Cocoa 绑定的变量。 还有一个步进器,我已将其绑定到同一个变量以增加值,我使用 NSLog 进行测试,效果很好。

我的问题是:每当我在框中输入数字时,除非我按 Enter,否则变量不会更新。 NSTextBox 如何知道用户何时完成输入?有没有办法在输入每个数字后动态更新变量?

非常感谢

丰富

【问题讨论】:

标签: objective-c cocoa xcode4.5


【解决方案1】:

首先,您确定要立即更新吗?用户的击键之一可能是无效字符(即,不是数字)。 NSNumberFormatter 可以提供帮助,但我相信您仍然必须“提交”该条目,然后才能将其验证为正确的数字条目。

其次,您始终可以实现-textDidChange: NSTextDelegate 方法。不过,同样的问题与上述相同。可能会触发无效输入。要解决此问题,您可以尝试从字符串输入创建一个 NSNumber,如果您没有获得 NSNumber,请不要费心做出反应,直到您这样做(如果该字段因输入无效而失去焦点,请将其更改回最后一个有效值),但是您正在复制您免费获得的“提交时验证” NSNumberFormatter 行为。

【讨论】:

  • 我很高兴它立即更新,因为在用户按下按钮之前循环不会运行,因此它不太可能导致问题。我希望数字格式化程序能帮助保持预期的输入。我认为 -textDidChange: 方法可能值得研究,但这对我来说需要更多的学习。
  • 第 1 步:实施 -textDidChange:。第 2 步:设置类的实例,其中 -textDidChange: 被实现为文本字段的委托。完毕。 :-)
  • 非常感谢。我已经让它工作了。你最后的评论真的很有帮助。实施 -textDidChange 并不难。但如果你没有提到它,我就不会设置委托。
  • 乐于助人。至少我今天完成了一些有用的事情。 :-D
【解决方案2】:

在 Interface Builder 中打开控件的“Continuous”属性应该会使字段在值更改时触发其绑定。

【讨论】:

  • 您好,感谢您的回复。这就是我的想法,但它似乎不起作用。我正在使用输入的 int 来驱动循环,但无论输入如何,循环都会运行四次。 4 是变量创建时发出的数字。
猜你喜欢
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
  • 2017-09-24
相关资源
最近更新 更多