5

整数のユーザー入力にNSTextFieldを使用しようとしています。テキストフィールドはNSNumberプロパティにバインドされており、setterメソッドで入力値をクリーンアップし(intであることを確認してください)、必要に応じてプロパティを設定します。willChangeValueForKey:とdidChangeValueForKey:を送信しましたが、そのテキストフィールドがアクティブな間、UIは新しい値に更新されません。

たとえば、setterメソッドがクリーンアップするテキストフィールドに「12abc」と入力すると「12」になりますが、テキストフィールドには「12abc」と表示されます。

InterfaceBuilderで「ContinuouslyUpdateValue」をチェックしました。

(setterメソッドがNSNumberではなくNSStringを受け取ることにも気づきました。これは正常ですか?)

NSTextFieldをNSNumberに接続する正しい方法は何ですか?プロパティのsetterメソッドはどのように見えますか?数値以外の値がテキストフィールドに表示されないようにするにはどうすればよいですか?

4

4 に答える 4

2

ピーター・ホージーの優れた答えについて、私がトップレベルに上げたいという重要なコメントがあります(最初のパスでそれを逃したため)。

ユーザーがフィールドを送信したときだけでなく、文字が入力されるたびにNSTextFieldを検証/変更したい場合は、バインディングだけから必要なものを取得することはできません。テキストフィールドにデリゲートを割り当ててから、デリゲートに実装する必要があります- (void)controlTextDidChange:(NSNotification *)aNotification。これは、テキストが変更されるたびに呼び出されます。必要に応じて、で値バリデーターを呼び出すことができますcontrolTextDidChange

例えば:

- (void)controlTextDidChange:(NSNotification *)aNotification
{
    NSError *outError;
    NSControl *textField = [aNotification object];
    NSString *myText = [textField stringValue];

    // myObject is the model object that owns the text in question
    // the validator can modify myText by reference
    [myObject validateValue:&myText error:&outError]];

    // update the NSNextField with the validated text
    [postingObject setStringValue:myText];
}
于 2009-05-07T19:44:48.327 に答える
0

に数値フォーマッタを設定する必要があると思いますNSTextField

フォーマッターについては、AppleのWebサイト「フォーマッターの適用」を参照してください。

于 2009-02-09T07:23:56.637 に答える