让NSFormatter持续验证NSTextFieldCell
在Cocoa中,我有一个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
链接地址: http://www.djcxy.com/p/14921.html
上一篇: Make NSFormatter validate NSTextFieldCell continuously
下一篇: What's the optimum way of storing an NSDate in NSUserDefaults?