Я сделать NSTextField, который имеет следующие характеристики:
1) позволяет только целые значения (0-9)
2) длинные
3) мин 1 1 или 2 цифры , не более 99
4) если введено 0, значение должно измениться на 1
5) если нажата кнопка удаления, и ячейка полностью опустела, значение должно измениться на 1 и будет автоматически выбрано (с подсветкой) так что пользователь может просто ввести новое значениекакао NSTextField NSNumberFormatter и делегировать
Я могу получить это поведение, создав для вопрос и делегат, но я хочу реализовать это исключительно в пользовательском форматировании (чтобы все было «просто», я полагаю).
Вот код, у меня есть:
В файле делегата:
- (void)controlTextDidChange:(NSNotification *)aNotification
{
if ([[txtfldSaveDuration stringValue] length]==0) {
[txtfldSaveDuration setStringValue:@"1"];
}
if ([[txtfldSaveDuration stringValue] isEqualToString:@"0"]) {
[txtfldSaveDuration setStringValue:@"1"];
}
}
в пользовательском файле форматировочной:
@implementation OnlyIntegerValueFormatter
- (BOOL)isPartialStringValid:(NSString*)partialString newEditingString: (NSString**)newString errorDescription:(NSString**)error
{
// necessary otherwise can't delete (to select) the first character
if([partialString length] == 0) {
return YES;
}
// two integer max length (99)
if([partialString length] > 2) {
return NO;
}
// integers only
NSScanner* scanner = [NSScanner scannerWithString:partialString];
if(!([scanner scanInt:0] && [scanner isAtEnd])) {
NSBeep();
return NO;
}
return YES;
}
@end
Как я могу упростить это?
Спасибо за это предложение. Однако это позволяет вводить буквы (хотя они выбраны, но клавиша курсора может отменить выбор), а 0 - действительная запись. Я приму свой ответ, потому что это, вероятно, просто нуждается в нескольких настройках. – tosa
Да, это было всего пару минут, чтобы исправить эти два предмета. Еще раз спасибо! – tosa