Obj-C, как мне убедиться, что пользователи вводят 1 или выше в UITextField? - PullRequest
1 голос
/ 04 апреля 2011

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

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

Таким образом, 0001 будет неприемлемым, так как обнулять его нужно от 1 до 1000000.

Как бы я это сделал?

Это то, что я имею до сих пор

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:
   (NSRange)range replacementString:(NSString *)string {

    BOOL res = TRUE;

    NSString *newString = [textField.text stringByReplacingCharactersInRange:
      range withString:string];
    newString = [NSString stringWithFormat:@"%d", [newString intValue]];
    res = !([newString length] > 8);

    return res;
}

1 Ответ

2 голосов
/ 04 апреля 2011

Хорошее правило для пользовательского интерфейса: «Будьте либеральны в том, что вы принять и консервативный в том, что вы отправляете "*.

Вместо того, чтобы наказывать пользователя за ввод, который не соответствует формату, который требуется вашему приложению, примите все, что можно преобразовать в правильный формат. Если вам нужно целое число от одного до миллиона включительно, 0001 - это странный, но совершенно правильный ввод. Я предлагаю это решение:

// Only check the value when the user is _done_ editing.
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {

    NSInteger intVal = [textField.text integerValue];
    // Check whether the input, whatever it is, 
    // can be changed into an acceptable value
    if( (intVal <= 1000000) && (intVal >= 1) ){
        // If so, display the format we want so the 
        // user learns for next time
        textField.text = [[NSNumber numberWithInteger:intVal] stringValue];
        return YES;
    }

    // Else show a small error message describing 
    // the problem and how to remedy it
    return NO;
}

*: Первоначально сформулировано Джоном Постелем как «Принцип устойчивости» ; может быть более конкретное заявление об этом для пользовательского интерфейса, но я не могу сейчас вспомнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...