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 ...

War es hilfreich?

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.

Die Bindung des NSTextField zu kontaktieren NSString text-Eigenschaft der Datei

Und jetzt Bindungen auf der Schaltfläche, geben Sie einfach seinen aktivierten Zustand auf die Länge des Datei Besitzer Texteigenschaft einrichten.

den aktivierten Zustand des NSButton Bindung an die Länge der Texteigenschaft

annd, das Arbeitsprodukt.

eingeben Bild Beschreibung hier eingeben Bild Beschreibung hier

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"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top