Deaktivieren / Aktivieren NSButton wenn NSTextField leer ist oder nicht
-
03-10-2019 - |
Frage
Ich bin Neuling mit Kakao. Ich habe eine Schaltfläche und ein Textfeld in meiner app. Ich möchte auf die Schaltfläche deaktiviert, wenn das Textfeld leer ist und dann aktiviert, wenn der Benutzer Typ etwas.
Jeder Punkt zu beginnen? Jede "Magie" Bindung in Interface Builder?
Danke
[EDITED]
Ive versucht, die AppDelegate als NSTextfield's Delegierten zu setzen und hinzugefügt, um diese Methode (myTextField und myButton sind IBOutlets):
- (void)textDidChange:(NSNotification *)aNotification
{
if ([[myTextField stringValue]length]>0) {
[myButton setEnabled: YES];
}
else {
[myButton setEnabled: NO];
}
}
Aber es passiert nichts ...
Lösung
Ive versucht, die AppDelegate als NSTextfield's Delegierten zu setzen und hinzugefügt, um diese Methode (myTextField und myButton sind IBOutlets):
- (void)textDidChange:(NSNotification *)aNotification { if ([[myTextField stringValue]length]>0) { [myButton setEnabled: YES]; } else { [myButton setEnabled: NO]; } }
Das ist die harte Art und Weise, aber es sollte gut funktionieren. Entweder haben Sie nicht das Textfeld einer delegate
Ausgang auf dieses Objekt angeschlossen, haben Sie nicht die myTextField
Steckdose in das Textfeld angeschlossen, oder Sie haben nicht die myButton
Ausgang der Taste angeschlossen.
Die andere Art und Weise der Steuerung, eine Eigenschaft Aussetzen der String-Wert zu geben wäre, binden die value
des Textfelds auf diese stringValue
Eigenschaft binden und binden die enabled
Bindung der Schaltfläche auf der stringValue.length
des Controllers.
Sie können auch die zwei Controller Eigenschaften geben, ein einen Booleschen Wert, und eingestellt, dass man als abhängig von der String-Eigenschaft auf, und binden Sie die Taste, um das. Das ist eine saubere und möglicherweise robustere Lösung, obwohl es mehr Arbeit ist.
Andere Tipps
Hier ist eine Lösung mit Bindungen.
Im Folgenden werde ich ein Setup NSTextField, die auf die Datei Besitzers „text“ Eigenschaft gebunden ist. "Text" ist ein NSString. I durch „Kontinuierlich Updates Value“ gefangen wurde. Denken meiner Lösung nicht funktioniert hat, aber wirklich war es nicht zu aktualisieren, wenn der Benutzer eingegeben hat, und nur dann, wenn das Textfeld des Fokus verloren.
Und jetzt Bindungen auf der Schaltfläche, geben Sie einfach seinen aktivierten Zustand auf die Länge des Datei Besitzer Texteigenschaft einrichten.
annd, das Arbeitsprodukt.
Wenn Sie controlTextDidChange statt textDidChange verwenden, können Sie loswerden der Benachrichtigung Sachen bekommen und verlassen sich nur auf die Delegierten NSTextField zu sein.
Danke Peter. Was ich verpaßt (meine harten Weg-Version) ist dieses Stück Code in der awakeFromNib im AppDelegate:
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(textDidChange:) name:NSControlTextDidChangeNotification object:myTextField];
Es funktioniert perfekt. Jetzt bin ich der einfache Weg versucht, aber ich fürchte, ich bin immer noch nicht gut genug, um mit den Bindungen.
So binden Sie die Eigenschaft
@property (retain) IBOutlet NSString *aStringValue;
mit dem textfield's Wert, was ich für "Binden Sie an:" in IB verwenden? "Controller-Key" und "Model Key Path"