Domanda

Io newbie con il cacao. Ho un pulsante e un textField nella mia app. Voglio che il pulsante disabilitato quando il campo di testo è vuota e abilitata quando il tipo di utente qualcosa.

Qualsiasi punto per iniziare? Qualsiasi "magico" vincolante in Interface Builder?

Grazie

[Modificato]

Ive tentato di impostare l'AppDelegate come delegata NSTextfield's e inserito questo metodo (myTextField e myButton sono IBOutlets):

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

Ma non succede nulla ...

È stato utile?

Soluzione

  

Ive tentato di impostare l'AppDelegate come delegata NSTextfield's e inserito questo metodo (myTextField e myButton sono IBOutlets):

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

Questo è il modo più difficile, ma dovrebbe funzionare bene. O non hai collegato all'uscita delegate del campo di testo a questo oggetto, non si è collegato alla presa myTextField al campo di testo, o non si è collegato alla presa myButton al pulsante.

L'altro modo sarebbe quello di dare il controller di una proprietà di esporre il valore della stringa, si legano value del campo di testo vincolante a questa proprietà stringValue, e si legano enabled del pulsante legame stringValue.length del controllore.

Si potrebbe anche dare il controller due proprietà, uno che ha un valore booleano, e impostare che uno come dipendente dalla proprietà della stringa, e si legano il pulsante per questo. Questo è un pulitore e la soluzione forse più robusto, anche se è più lavoro.

Altri suggerimenti

Ecco una soluzione utilizzando le associazioni.

Di seguito ha installato un NSTextField che è destinato a proprietà "testo" del proprietario del file. "Testo" è una NSString. Mi è stato catturato dai "Continuamente Aggiornamenti Valore". Pensare la mia soluzione non ha funzionato, ma in realtà non è stato l'aggiornamento come l'utente ha digitato, e solo quando il campo di testo ha perso fuoco.

Binding la NSTextField alla proprietà text proprietaria NSString del file

E ora la creazione di binding sul pulsante, è sufficiente impostare il suo stato abilitato alla lunghezza della proprietà di testo del proprietario del file.

Binding stato abilitato del NSButton alla lunghezza della proprietà del testo

annd, il prodotto di lavoro.

entrare descrizione dell'immagine qui entrare descrizione dell'immagine qui

Se si utilizza invece di controlTextDidChange textDidChange, si può sbarazzarsi della roba di notifica e fare affidamento solo su essere delegato del NSTextField.

Grazie Peter. Quello che ho perso (nel mio versione hard way) è questo pezzo di codice nel awakeFromNib nella AppDelegate:

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

Funziona perfetto. Ora sto cercando il modo più semplice, ma ho paura io non sono ancora abbastanza buono con le associazioni.

Per associare la proprietà

@property (retain) IBOutlet NSString *aStringValue;

con il valore textfield's, che cosa devo usare in IB per "Bind a:", "Chiave di controllo" e "Modello chiave Path"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top