2010-05-19 85 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