objective-c - 我怎样才能制作一个具有焦点重绘本身的 NSTextField ?

标签 objective-c cocoa user-interface nstextfield nsformatter

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

更改格式时,具有焦点的 NSTextField 不会更新其显示,直到焦点丢失。下面是截图来说明:

Changing to drop-frame format

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

对于我需要做什么才能实现这一点有什么建议吗?

最佳答案

我现在确实设法解决了这个问题。这可能有点黑客行为,但基本上我最终所做的是使用 currentEditor 检索 NSTextField 的字段编辑器,并将其作为带有发布通知的对象发送当格式改变时。

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

事实上,我已将解决方案发布到 github,供其他可能觉得有用的人使用。 https://github.com/cfloisand/smpteformatter

关于objective-c - 我怎样才能制作一个具有焦点重绘本身的 NSTextField ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16678559/

相关文章:

c++ - 对 Cocos2d-x 大小类型的引用不明确

ios - isKindOfClass 无法按预期运行 IOS 7

objective-c - 使用Core Animation/CALayer进行简单的分层绘画

c - 使用 Turbo C 在 C 语言中进行 GUI 编程

ios - Swift - 拍照或选择现有的

objective-c - 将参数列表或数组从 Obj-C 传递到 Applescript

ios - 启用 Show Blended Layers 时 UIButton 部分变红

cocoa - 将一些代码移动到外部框架(Cocoa)后发生misaligned_stack_error

xcode - NSStatusItem 全屏问题

java - 如何将 GUI 引入现有的面向对象项目?