4

Cocoa には、セルが NSTextFieldCell である NSOutlineView があります。セルには、特定のルール (float、または間にスペースを入れた float のペアなど) に従って書式設定された文字列である値が表示されます。テキストを検証するためにカスタム NSFormatter を作成しましたが、これは問題なく動作するようです。

ただし、セル(またはアウトラインビュー、何が原因かはわかりません)は、編集が終了する瞬間にのみフォーマッターを使用しているようです。テキスト フィールドにアルファベット文字を入力すると (書式設定規則に違反します)、これらの文字が表示されます。フォーマッタが機能していることに気付く唯一の方法は、キーボード フォーカスをこのセルから移動できなくなったことです。セルの内容を有効なフォームに戻すと、フォーカスを移動できます。

セルとアウトライン ビューの両方を「連続」に設定しました。

そもそもセルにテキストを入力できなかった方がよいでしょう。そのようにすることは可能ですか?

4

1 に答える 1

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
于 2010-05-19T14:58:09.800 に答える