4

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

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

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

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

4

1 回答 1

7

回答我自己的问题,因为我找到了解决方案。有一个可选的方法可以覆盖 on 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
于 2010-05-19T14:58:09.800 回答