【问题标题】:Making an NSTextField act like a "microwave timer", store as NSNumber使 NSTextField 像“微波炉计时器”一样,存储为 NSNumber
【发布时间】:2009-03-27 19:41:50
【问题描述】:

我想要完成的是两个方面:

  1. 我希望我的 NSTextField 像“微波炉计时器”一样工作,并在输入字符时更新。因此该字段将默认为“00:00”(分钟、秒)。当按下 1 时,该字段看起来像“00:01”。然后按下 4 和“00:14”。按下 2 并显示“01:42”。
  2. 我想将此作为 NSNumber 存储在控制器上,作为计时器中的秒数。因此,如果文本字段显示“10:00”,则该属性的值为 600。

似乎 NSFormatter 是一个值得关注的好地方,但我的尝试充满了失败。欢迎任何帮助。谢谢!

【问题讨论】:

  • 也许您应该发布您无法使用的内容,以便人们可以帮助您或引导您朝着不同的方向前进。
  • 您是否遇到了逻辑或事件处理或两者兼而有之的问题?或者,是其他问​​题吗?我同意 Andrew,发布您的努力会有所帮助。
  • 另外 - 当用户点击退出,然后 30 秒后重新激活文本字段时,您希望发生什么?
  • 好的,所以我有一个 NSFormatter 子类,它可以成功地将秒转换为计时器 ("00:00") 并将计时器转换为秒。我的问题在于将其连接到一个文本字段,该文本字段将使用计时器格式正确更新文本字段,并使用 KVO 将计时器作为 NSNumber 存储在控制器中。

标签: objective-c cocoa macos


【解决方案1】:

a) 将 timer 属性的值划分为分钟和秒。然后使用带有两个前导零的NSFormatter 设置从两个数字创建字符串(请参阅:How to specify decimal places when formatting NSNumber objects?)。然后使用stringWithFormat: 将两个字符串放在冒号的两侧。

b)或者只是将四个(在您的示例中)数字中的每个数字分开,然后将该数字放在一个字符串中,冒号放在正确的位置。 (所以首先是几十分钟,然后是分钟,然后是几十秒,然后是秒)

以上任何一个都可以在 NSTextField 上设置的 custom NSFormatter subclass 中,也可以在由计时器属性的观察者(使用 KVO)调用的视图控制器中的方法中。

【讨论】:

    猜你喜欢
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2011-12-10
    • 2021-04-30
    相关资源
    最近更新 更多