2010-05-19 87 views
4

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

但是,单元格(或大纲视图,我不确定是什么导致了这一点)似乎只是在编辑结束时使用格式化程序。如果我输入一些字母字符的文本字段(这违反了格式规则),这些字符显示出来 - 我注意到格式化做的工作的唯一办法是,我现在移动键盘焦点从此单元移开防止。如果我将单元格的内容返回给有效表单,那么我可以将焦点移开。

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

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

回答

7

回答我自己的问题,因为我找到了解决方案。有一个可选的方法覆盖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