我有3 UITextField
接收用户输入。 UITextField
代表
我想知道如何限制用户输入错误的值到这些UITextField
。
例如,天数(1-31);如果用户先输入9,则他无法输入任何其他内容,因为9是该月中唯一的一天。
或者另一个例子是月(1-12);如果用户键入5这是他们唯一的选择吗?
答案 0 :(得分:2)
您需要实施UITextFieldDelegate
以在用户输入过程中处理文本更改,以便您接受所需的字符并拒绝不需要的字符。
您可以使用NSRegularExpression
来检查它是否与日,月或年模式匹配。
在this
中描述答案 1 :(得分:1)
您可以使用委托作为此选项来获得所需的功能。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
BOOL returnValue = NO;
NSMutableString *stringValue = [NSMutableString stringWithString:[textField text]];
[stringValue insertString:string atIndex:range.location];
if(textField == dayField){
if([stringValue intValue]>=0 && [stringValue intValue]<=31 && [stringValue intValue])
returnValue = YES;
}
if(textField == monthField){
if([stringValue intValue]>=0 && [stringValue intValue]<=12 && [stringValue intValue])
returnValue = YES;
}
return returnValue;
}
这也将检查仅限数字的情况。
答案 2 :(得分:0)
您最好将UIPickerView
与有效日期,月份和年份一起用作数据源。 It should be good start
修改强>
根据下面的讨论,我建议你制作一个固定长度的UITextFields,一旦文本结束编辑,就比较数字:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSUInteger newLength = [textField.text length] + [string length] - range.length;
if([textField isEqual:DayTextField]) // `DayTextField` refers to textfield that represents day
{
return (newLength > 2);
}
// else if .....
return NO;
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
if([textField isEqual:DayTextField])
{
int val = [textField.text integerValue];
if( 1 <= val <= 31)
{
NSLog(@"Valid range");
}
else
{
NSLog(@"Invalid range");
// clear day textfield
}
}
}
答案 3 :(得分:0)
对您而言,解决方案是为每个TextField&amp;分配一个Tag值。然后符合UITextFieldDelegate
&amp;遵循此实施。
123
以外的任何内容,则应仅允许他输入1位数字。如果用户输入集合123
中的任何数字,则应允许他输入2位数字。
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if(textField.tag == kTagDayText){
if([textField.text length] <=2){
if([textField.text length] == 1){
NSCharacterSet *monthTwoDigitsNumbers = [NSCharacterSet characterSetWithCharactersInString:@"123"];
NSCharacterSet *characterSetTwoDigit = [NSCharacterSet characterSetWithCharactersInString:textField.text];
BOOL stringIsValid = [monthTwoDigitsNumbers isSupersetOfSet:characterSetTwoDigit];
return stringIsValid;
}else {
NSCharacterSet *monthOneDigitsNumbers = [NSCharacterSet characterSetWithCharactersInString:@"456789"];
NSCharacterSet *characterSetOneDigit = [NSCharacterSet characterSetWithCharactersInString:textField.text];
BOOL stringIsValid = [monthOneDigitsNumbers isSupersetOfSet:characterSetOneDigit];
return stringIsValid;
}
}
}
return ([string stringByTrimmingCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].length > 0) || [string isEqualToString:@""];
}
希望能给出一些想法。