过去,我设法限制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;
}
答案 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的声明,但我现在不记得了。