12

私はココアの初心者です。アプリにボタンとtextFieldがあります。テキストフィールドが空の場合はボタンを無効にし、ユーザーが何かを入力した場合はボタンを有効にします。

どこから始めますか?Interface Builderの「魔法の」バインディングはありますか?

ありがとう

[編集]

appDelegateをNSTextfieldのデリゲートとして設定しようとし、次のメソッドを追加しました(myTextfieldとmyButtonはIBOutletsです)。

- (void)textDidChange:(NSNotification *)aNotification
{
    if ([[myTextField stringValue]length]>0) {
        [myButton setEnabled: YES];
    }
    else {
        [myButton setEnabled: NO];
    }
}

しかし、何も起こりません...

4

4 に答える 4

15

appDelegateをNSTextfieldのデリゲートとして設定しようとし、次のメソッドを追加しました(myTextfieldとmyButtonはIBOutletsです)。

- (void)textDidChange:(NSNotification *)aNotification
{
    if ([[myTextField stringValue]length]>0) {
        [myButton setEnabled: YES];
    }
    else {
        [myButton setEnabled: NO];
    }
}

それは難しい方法ですが、うまくいくはずです。テキストフィールドのdelegateアウトレットをこのオブジェクトに接続していないか、myTextFieldアウトレットをテキストフィールドに接続していないか、myButtonアウトレットをボタンに接続していないかのいずれかです。

もう1つの方法は、文字列値を公開するプロパティをコントローラーに与え、テキストフィールドのvalueバインディングをこのstringValueプロパティにバインドし、ボタンのenabledバインディングをコントローラーのにバインドすることstringValue.lengthです。

また、コントローラーに2つのプロパティを指定します。1つはブール値を持ち、その1つを文字列プロパティに依存するものとして設定し、ボタンをそれにバインドします。これは、よりクリーンで、おそらくより堅牢なソリューションですが、より多くの作業が必要です。

于 2010-09-16T16:06:17.080 に答える
10

バインディングを使用した解決策は次のとおりです。

以下では、ファイル所有者の「text」プロパティにバインドされているNSTextFieldを設定します。「テキスト」はNSStringです。「継続的に値を更新する」に引っかかった。私の解決策は機能しなかったと思いましたが、実際にはユーザーが入力したときに更新されておらず、テキストフィールドがフォーカスを失ったときだけでした。

NSTextFieldをファイルの所有者NSStringテキストプロパティにバインドする

次に、ボタンにバインディングを設定し、有効な状態をファイル所有者のテキストプロパティの長さに設定するだけです。

NSButtonの有効な状態をテキストプロパティの長さにバインドする

Annd、実用的な製品。

ここに画像の説明を入力してください ここに画像の説明を入力してください

于 2014-06-03T14:36:16.267 に答える
4

textDidChangeの代わりにcontrolTextDidChangeを使用すると、通知機能を削除して、NSTextFieldのデリゲートであることに依存できます。

于 2011-05-28T06:24:24.997 に答える
0

ピーターに感謝します。私が(私の難しいバージョンで)見逃したのは、appDelegateのawakeFromNibにあるこのコードです:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(textDidChange:) name:NSControlTextDidChangeNotification object:myTextField];

それは完璧に動作します。今は簡単な方法を試していますが、バインディングがまだ十分ではないのではないかと思います。

プロパティをバインドするには

@property (retain) IBOutlet NSString *aStringValue;

テキストフィールドの値を使用して、「バインド先:」、「コントローラーキー」、「モデルキーパス」のIBで何を使用する必要がありますか?

于 2010-09-17T14:19:45.967 に答える