質問

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

開始するポイントはありますか?インターフェイスビルダーに「魔法」のバインディングはありますか?

ありがとう

編集

AppDelegateをNSTextfieldの代表として設定しようとし、この方法を追加しようとしました(MyTextFieldとMyButtonはiBoutletsです)

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

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

役に立ちましたか?

解決

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つはブール値を持つプロパティを提供し、文字列プロパティに依存しているものとして設定し、ボタンをバインドすることもできます。それはよりクリーンで、おそらくより堅牢なソリューションですが、より多くの仕事です。

他のヒント

これがバインディングを使用したソリューションです。

以下では、ファイル所有者の「テキスト」プロパティにバインドされているNSTextFieldを設定します。 「テキスト」はnsstringです。 「継続的に更新価値」に巻き込まれました。 私のソリューションはうまくいきませんでしたが、実際には、ユーザーが入力したときに更新されていませんでした。

Binding the NSTextField to the file's owner NSString text property

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

Binding the NSButton's enabled state to the text property's length

Annd、作業製品。

enter image description here enter image description here

TextDidchangeの代わりにControlTextDidchangeを使用すると、通知のものを取り除くことができ、NSTextfieldの代表者であることに依存することができます。

ピーターに感謝します。私が見逃したのは(私のハードウェイバージョンで)AppDelegateのAwakeFromnibのこのコードです。

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

完璧に機能します。今、私は簡単な方法を試していますが、私はまだバインディングで十分ではないのではないかと心配しています。

プロパティをバインドします

@property (retain) IBOutlet NSString *aStringValue;

Textfieldの価値により、IBで「Bind to」、「コントローラーキー」、「モデルキーパス」に使用する必要があるものは何ですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top