nstextfieldが空であるかどうかを無効/有効にしますnsbutton
-
03-10-2019 - |
質問
私はココアと初心者です。アプリにボタンとテキストフィールドがあります。テキストフィールドが空であるときにボタンを無効にし、ユーザーが何かを入力するときに有効にしたい。
開始するポイントはありますか?インターフェイスビルダーに「魔法」のバインディングはありますか?
ありがとう
編集
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です。 「継続的に更新価値」に巻き込まれました。 私のソリューションはうまくいきませんでしたが、実際には、ユーザーが入力したときに更新されていませんでした。
そして、ボタンにバインディングをセットアップするだけで、有効な状態をファイル所有者のテキストプロパティの長さに設定するだけです。
Annd、作業製品。
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」、「コントローラーキー」、「モデルキーパス」に使用する必要があるものは何ですか?