Disabilita / Abilita NSButton se NSTextfield è vuota o non
-
03-10-2019 - |
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 ...
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.
E ora la creazione di binding sul pulsante, è sufficiente impostare il suo stato abilitato alla lunghezza della proprietà di testo del proprietario del file.
annd, il prodotto di lavoro.
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"