È necessario disporre di un NSTextField con un limite di testo di massimo 4 caratteri e mostrare sempre in maiuscolo, ma non è possibile trovare un buon modo per ottenerlo. Ho provato a farlo attraverso un'associazione con un metodo di convalida, ma la convalida viene chiamata solo quando il controllo perde il primo risponditore e non va bene.Come limitare la lunghezza del testo NSTextField e tenerla sempre in maiuscolo?
temporaneamente Ho fatto il lavoro osservando la NSControlTextDidChangeNotification notifica sul campo di testo e averlo chiamare il metodo:
- (void)textDidChange:(NSNotification*)notification {
NSTextField* textField = [notification object];
NSString* value = [textField stringValue];
if ([value length] > 4) {
[textField setStringValue:[[value uppercaseString] substringWithRange:NSMakeRange(0, 4)]];
} else {
[textField setStringValue:[value uppercaseString]];
}
}
Ma questo sicuramente non è il modo migliore di farlo. Qualche suggerimento migliore?
Dovresti accettare la risposta di Graham, dato che ti ha indicato nella direzione corretta! Buon lavoro! – Jab
Grazie per aver trovato il tempo di tornare e pubblicare l'intera soluzione! –
Ho scoperto un errore con il codice sopra. Esiste un potenziale exploit che utilizza isPartialStringValid: newEditingString: errorDescription :. Se inserisci un testo in un campo NSText, carattere per carattere sulla tastiera, non si verificheranno problemi. Tuttavia, se si incolla una stringa di 2 o più caratteri nel campo di testo, eseguirà la convalida sull'ultimo carattere immesso, ma ignorerà tutti i caratteri inseriti in precedenza. Questo può portare a inserire più caratteri di quelli consentiti nel campo di testo. Qui di seguito pubblicherò altri dettagli e una soluzione (spazio esaurito qui). –