0

まず第一に、私はIBなしで、そしてKVOのような高度なObjective-C技術なしでこれをしなければなりません。

私の問題は、テキストフィールドのまったく新しい文字列値を取得する方法が見つからないという単純な事実から来ています。

デリゲート関数を使用してみました:

- (BOOL)textView:(NSTextView *)aTextView shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString

しかし、これでは、検証に必要な完全な文字列ではなく、置換文字列だけが表示されます。後でテキストを使用できます

見つけた

- (void)textDidChange:(NSNotification *)aNotification 
- (void)controlTextDidChange:(NSNotification *)aNotification

しかし、私がこの電話を受けたとき、それはすでに遅れており、最後のテキストフィールドの内容はすでになくなっています。では、これを処理するための最良の方法は何ですか?

そして、はい、 NSTextFieldをNSNumberにバインドすることを読みましたが、問題を解決する方法がわかりません。

必要なのは、単純な「-(BOOL)acceptNewValue(NSStringstring)」テスト関数だけです。ココアですべてがとても複雑になり、MFCのように感じ始めるのはなぜですか。

4

1 に答える 1

3

デリゲート関数を使用してみました:

メソッドを実装することを意味します。それを使用することは、それを呼び出すことを意味します。これはNSTextViewの仕事であり、C関数ではなくObjective-Cメソッドです。

- (BOOL)textView:(NSTextView *)aTextView shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString

しかし、これでは、検証に必要な完全な文字列ではなく、置換文字列だけが表示されます。

ただし、テキストビューで前の完全な文字列を要求し、その文字列の変更可能なコピーに自分で変更を適用して、結果の文字列を検証できます。NO変更によって無効な入力が発生する場合に戻ります。

于 2010-08-31T01:29:53.897 に答える