cocoa - 让 NSFormatter 持续验证 NSTextFieldCell

标签 cocoa nstableview nsoutlineview nscell nsformatter

在 Cocoa 中,我有一个 NSOutlineView,其中单元格是 NSTextFieldCell。该单元格显示的值是根据特定规则格式化的字符串(例如 float 或中间有空格的 float 对)。我制作了一个自定义 NSFormatter 来验证文本,这似乎没有问题。

但是,单元格(或大纲 View ,我不确定是什么原因造成的)似乎只在我的编辑结束时使用格式化程序。如果我在文本字段中输入一些字母字符(这违反了格式化规则),这些字符就会出现——我注意到格式化程序完成其工作的唯一方式是我现在无法将键盘焦点从该单元格移开。如果我将单元格的内容返回到有效的表单,那么我可以将焦点移开。

我已将单元格和大纲 View 设置为“连续”。

如果我一开始就无法在单元格中输入文本,那就更好了。是否有可能做到这一点,如果可以的话,如何做到?

最佳答案

回答我自己的问题,因为我找到了解决方案。有一个可选方法可以覆盖 NSFormatter,这可以解决问题。可选方法是:

- (BOOL) isPartialStringValid: (NSString*) partialString
             newEditingString: (NSString**) newString
             errorDescription: (NSString**) error

如果 partialString 无效,则可以简单地返回 NO。如果需要,可以通过 newString 中的引用返回固定字符串。

还有另一种方法也可以使用,但它更复杂:

- (BOOL) isPartialStringValid: (NSString**) partialStringPtr
        proposedSelectedRange: (NSRangePointer) proposedSelRangePtr
               originalString: (NSString*) origString
        originalSelectedRange: (NSRange) origSelRange
             errorDescription: (NSString**) error

关于cocoa - 让 NSFormatter 持续验证 NSTextFieldCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2865294/

相关文章:

swift - 将 NSTreeController 与 NSOutlineView 一起使用

objective-c - NSOutlineView 的拖放方法未被调用

cocoa - 如何将 NSTreeController、NSOutlineView 和 Core Data 与 "invisible"根项一起使用?

cocoa - Mac 应用程序之间的 API 切换?

xcode - 设置 NSMenuItem 内 NSScrollView 的最大高度

cocoa - 将 NSTableView 中选定行中的文本显示为白色

objective-c - 如何制作圆角 NSTableView 行?

macos - 当应用程序从 XCode 运行时,文件拖放 View 有效,但不能作为独立应用程序运行

objective-c - NSDocumentController 新文档 :

ios - 恢复过去的 NSLog