在可可中,我有一个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

09-19 07:43