让NSFormatter连续验证NSTextFieldCell
问题描述:
在Cocoa中,我有一个NSOutlineView,其中的单元格是NSTextFieldCell。单元格显示的值是根据特定规则格式化的字符串(例如浮点数或浮点数对之间有空格)。我做了一个自定义NSFormatter来验证文本,这似乎没有问题。让NSFormatter连续验证NSTextFieldCell
但是,单元格(或大纲视图,我不确定是什么导致了这一点)似乎只是在编辑结束时使用格式化程序。如果我输入一些字母字符的文本字段(这违反了格式规则),这些字符显示出来 - 我注意到格式化做的工作的唯一办法是,我现在移动键盘焦点从此单元移开防止。如果我将单元格的内容返回给有效表单,那么我可以将焦点移开。
我已经设置单元格和大纲视图为“连续”。
如果我无法首先将文本输入到单元格中,那会更好。是否有可能做到这一点,如果是这样,怎么样?
答
回答我自己的问题,因为我找到了解决方案。有一个可选的方法覆盖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