如何创建具有焦点重绘的NSTextField?

时间:2013-05-21 20:06:23

标签: objective-c cocoa user-interface nstextfield nsformatter

我已经子类化并定义了我自己的自定义NSFormatter和NSTextField类,以便正确显示SMPTE时间码值(HH:MM:SS:FF)。当用户选择使用drop-frame作为fps值时,格式将更改为HH:MM:SS;FF(结尾处的分号)。除了一个最后的障碍之外,我一切都运作良好。

更改格式时,具有焦点的NSTextField不会更新它的显示,直到它的焦点丢失为止。这是一个截图来说明:

Changing to drop-frame format

我尝试在格式更改时向NSTextField发送setNeedsDisplay消息,并向其发送display消息。到目前为止似乎没有任何工作,并且具有焦点的文本字段拒绝更新/重绘自身,直到它失去焦点。

为实现这一目标,我需要做些什么?

1 个答案:

答案 0 :(得分:1)

我确实设法解决了这个问题。它可能有点像黑客,但基本上我最终做的是用NSTextField检索currentEditor的字段编辑器,并将其作为对象发送,其中包含格式更改时发布的通知。

使用字段编辑器,我只需要replaceCharactersInRange:withString:将最后一个“:”更改为“;”反之亦然。虽然它可能不是最佳的,但它的工作完美。

事实上,我已经将解决​​方案发布给了github,以供其他可能认为有用的人使用。 https://github.com/cfloisand/smpteformatter

相关问题