Как я могу ограничить числовые настройки? - PullRequest
0 голосов
/ 27 марта 2012

У меня есть простая настройка в моем приложении, и я хочу, чтобы числовое значение ограничивалось 10 000. У меня есть запись в Root.plist, и это PSTextFieldSpecifier. Я могу преобразовать и ограничить введенную строку, но если пользователь вводит 1234567890, этот текст остается в настройках, и пользователь не знает, что я его ограничил.

Я конвертирую, используя [по умолчанию integerForKey], когда мне нужно использовать это значение в моей программе.

Я потратил некоторое время на поиски решения этой проблемы, и, поскольку я не нашел ответа, задаюсь вопросом, использую ли я неправильный подход.

Ответы [ 2 ]

0 голосов
/ 22 августа 2014

Вы не сможете обеспечить мгновенную обратную связь, когда пользователь вводит недопустимое значение в приложении настроек. Однако вы можете сбросить значение, как только ваше приложение станет активным. то есть это решит проблему где

если пользователь вводит 1234567890, этот текст остается в настройках, и пользователь не знает, что я его ограничил

например:

NSInteger value = [[NSUserDefaults standardUserDefaults] integerForKey:@"my_key"];

if (value < 0 || value > 10000) {
    // invalid value

    value = 10000;

    // reset value shown in iOS settings app 
    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInteger:value] forKey:@"my_key"]];
}

return value;
0 голосов
/ 27 марта 2012

Ограничьте количество цифр, которые пользователь может ввести в текстовое поле, применяя следующий метод делегата текстового поля: shouldChangeCharactersInRange.

Этот метод является частью делегата текстового поля UITextFieldDelegate.Согласуйте контроллер представления с этим протоколом и реализуйте функцию следующим образом:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    int val = [string intVal];
    if (val > 10000)
        return NO;

    return YES;
}

Если в текстовом поле задано не только числовое значение, чем проверить строку замены перед преобразованием в число

...