NSTextField met een formatter

Als je een NSTextField gebruikt in de Interface builder, dan kan je daar een formatter op gooien die bepaalt welke waarden je mag intikken in het veld.

Maar ik merk dat als de gebruiker het veld leeg laat, dan mag dat gewoon. Een IntValue opvragen geeft dan geloof ik 0, ook al geeft de formatter aan dat 0 geen geldige waarde is.

Dus dan bouw ik een action die alsnog controleert of het veld leeg is.

Kan het echt niet in de Interface Builder dat je daar instelt “mag niet leeg zijn” of zo? Zie ik iets over het hoofd?

Volgens mij zie je niets over het hoofd en kan het inderdaad (en vreemd genoeg) niet. Je zou een subklasse van NSFormatter of NSNumberFormatter kunnen maken die wel op lege invoer controleert, of een klasse die als delegate van het NSTextField de controle uitvoert. Zoiets als:

[code:1:149bbae543]@implementation EmptyFieldChecker

  • (BOOL)control:(NSControl *)control isValidObject:(id)obj
    {
    if ([obj isKindOfClass:[NSString class]]) {
    if ([obj length] == 0) {
    NSBeep();
    return NO;
    }
    }
    return YES;
    }

@end
[/code:1:149bbae543]

Een keer wat werk maar de klasse is daarna wel steeds in interface builder te gebruiken. Of misschien heeft iemand anders een betere oplossing…