Obj-C,如何确保用户在UITextField中输入1或更高版本?

时间:2011-04-04 19:11:51

标签: iphone objective-c xcode uitextfield

过去,我设法限制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 个答案:

答案 0 :(得分:2)

对于用户界面来说,一个好的规则就是:“对你有所了解 接受,并保守你发送的内容“*。

不是惩罚用户输入的内容不符合您的应用所希望的格式,而是接受任何可以转换为正确格式的内容。如果你想要一个百万到一百万的整数,那么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;
}

*:最初由John Postel制定为"Robustness Principle";可能会有更多关于UI的声明,但我现在不记得了。