让NSFormatter持续验证NSTextFieldCell

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

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

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

如果我无法首先将文本输入到单元格中,那会更好。 是否有可能做到这一点,如果是这样,怎么样?


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

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

这里可以简单地返回NO如果partialString是无效的。 如果需要的话,可以在newString通过引用返回一个固定的字符串。

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

- (BOOL) isPartialStringValid: (NSString**) partialStringPtr
        proposedSelectedRange: (NSRangePointer) proposedSelRangePtr
               originalString: (NSString*) origString
        originalSelectedRange: (NSRange) origSelRange
             errorDescription: (NSString**) error
链接地址: http://www.djcxy.com/p/14921.html

上一篇: Make NSFormatter validate NSTextFieldCell continuously

下一篇: What's the optimum way of storing an NSDate in NSUserDefaults?