使NSFormatter持续验证NSTextFieldCell

har*_*rms 4 cocoa nsoutlineview nstableview nsformatter nscell

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

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

我已将单元格和大纲视图都设置为"连续".

如果我不能首先在文本中输入文本会更好.有可能做到这样,如果是这样,怎么样?

har*_*rms 7

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

- (BOOL) isPartialStringValid: (NSString*) partialString
             newEditingString: (NSString**) newString
             errorDescription: (NSString**) error
Run Code Online (Sandbox Code Playgroud)

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

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

- (BOOL) isPartialStringValid: (NSString**) partialStringPtr
        proposedSelectedRange: (NSRangePointer) proposedSelRangePtr
               originalString: (NSString*) origString
        originalSelectedRange: (NSRange) origSelRange
             errorDescription: (NSString**) error
Run Code Online (Sandbox Code Playgroud)