Ios 使用单个日期选择器验证多个UITextField(即fromDate<;toDate)上的日期

Ios 使用单个日期选择器验证多个UITextField(即fromDate<;toDate)上的日期,ios,objective-c,validation,uitextfield,uidatepicker,Ios,Objective C,Validation,Uitextfield,Uidatepicker,我在多个UITextFields上使用单个UIDatePicker。当点击UITextField时,它调用UIDatePicker,并在选择器滚动时更新文本。这一切都很好,但现在我想做一些验证。我的UITextFields是“受雇于”和“受雇于”,我需要检查“从”字段总是小于“到”字段(即,一个人不能受雇于从1995年到1990年) 下面是我的代码,它为每个UITextField设置默认日期和输入视图: - (void)datePickerTextField { // Open date

我在多个
UITextFields
上使用单个
UIDatePicker
。当点击
UITextField
时,它调用
UIDatePicker
,并在选择器滚动时更新文本。这一切都很好,但现在我想做一些验证。我的
UITextFields
是“受雇于”和“受雇于”,我需要检查
“从”
字段总是小于
“到”
字段(即,一个人不能受雇于
从1995年到1990年)

下面是我的代码,它为每个UITextField设置默认日期和输入视图:

- (void)datePickerTextField {
    // Open date picker when textfield is tapped
    UIDatePicker *datePicker = [[UIDatePicker alloc]init];
    datePicker.datePickerMode = UIDatePickerModeDate;

    // Set default date
    NSCalendar *calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *components = [[NSDateComponents alloc]init];
    [components setDay:1];
    [components setMonth:1];
    [components setYear:1980];
    NSDate *defaultDate = [calendar dateFromComponents:components];
    [datePicker setDate:defaultDate];

    [datePicker setMaximumDate:[NSDate date]];
    [datePicker addTarget:self
                   action:@selector(updateDateTextField:)
         forControlEvents:UIControlEventValueChanged];
    datePicker.backgroundColor = [UIColor clearColor];

    // Set input for each textfield
    [self.empFrom1 setInputView:datePicker];
    [self.empTo1 setInputView:datePicker];
    // ... more fields
    [self.empFrom10 setInputView:datePicker];
    [self.empTo10 setInputView:datePicker];
}
我尝试了以下方法:

- (void)updateDateTextField:(UIDatePicker *) datePicker {
    // Format date
    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
    [formatter setDateFormat:@"dd/MM/yyyy"];
    NSString *stringFromDate = [formatter stringFromDate:datePicker.date];

    UIAlertView *validDate = [[UIAlertView alloc]initWithTitle:@"Error"
                                                       message:@"Please check dates"
                                                      delegate:nil
                                             cancelButtonTitle:@"Dismiss"
                                             otherButtonTitles:nil];

    // Check which textfield is active and set date
    if ([self.empFrom1 isFirstResponder]) {
        self.empFrom1.text = [NSString stringWithFormat:@"%@", stringFromDate];

        NSString *empFrom = self.empFrom1.text;
        NSString *lastFour = [empFrom substringFromIndex:empFrom.length - 4];
        _from = @([lastFour integerValue]);
        NSLog(@"FROM: %@", _from);
    }
    else if ([self.empTo1 isFirstResponder]) {
        self.empTo1.text = [NSString stringWithFormat:@"%@", stringFromDate];

        NSString *empTo = self.empTo1.text;
        NSString *lastFour = [empTo substringFromIndex:empTo.length - 4];
        _to = @([lastFour integerValue]);
        NSLog(@"TO: %@", _to);

        if (_from > _to) {
            [validDate show];
        }
    }
我不确定上面的代码段为什么不起作用,因为
NGLog
清楚地输出了正确的
整数
,但即使
FROM
小于
,警报仍会显示

我已经到处搜索过了,在对多个
UITextFields
重新使用单个
UIDatePicker
时,似乎找不到有效的解决方案。这可能吗?或者我必须为每个字段创建一个新的
UIDatePicker
?非常感谢您的帮助

- (void)updateDateTextField:(UIDatePicker *) datePicker { 

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
    [formatter setDateFormat:@"dd/MM/yyyy"]; 
    NSString *stringFromDate = [formatter stringFromDate:datePicker.date]; 

    UIAlertView *validDate = [[UIAlertView alloc]initWithTitle:@"Error" message:@"Please check dates" delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil]; 

    // Check which textfield is active and set date 
    if ([self.empFrom1 isFirstResponder]) {   
        self.empFrom1.text = [NSString stringWithFormat:@"%@", stringFromDate]; 
        self.dateFrom = datePicker.date; 
    } else if ([self.empTo1 isFirstResponder]) { 
        self.empTo1.text = [NSString stringWithFormat:@"%@", stringFromDate]; 
        self.dateTo = datePicker.date; 

        if( [self.dateFrom timeIntervalSinceDate:self.dateTo] > 0 ) { 
            [validDate show]; 
        } 
    } 
}

在类中添加2个NSDate属性,例如dateFrom&dateTo

我不确定这是否是我想要的。我不必检查日期是否有效(即不是在将来),因为我已经在
datePickerTextField
方法中说明了这一点(如果我错了,请纠正我)。我只需要检查
FROM
是否总是小于
to
。请参阅我的更新帖子,其中显示了另一个尝试的解决方案-我是否在正确的轨道上?能否在显示警报的if检查中添加以下行?NSLog(@“%@<%@”,“从”到“,”从);请添加控制台输出:)NSLog的输出是:
NGLS[45133:60b]from:1985 NGLS[45133:60b]TO:1988 NGLS[45133:60b]TO:1990 NGLS[45133:60b]1990<1985
-然后将
滚动到
字段后,它不会返回到该测试中。无论我在
TO
字段中设置了什么日期,警报都不会再次显示。奇怪,我需要重置输入还是什么?谢谢。1990年比1985年小是非常令人恼火的,因为它显然不是。你确定这条路正确吗?因为NSLog或if检查是错误的,因为我认为计算机不会出现这样的计算错误。我刚刚颠倒了if语句
(\u from<\u to)
NSLog(@“%@<%@”,“u from,\u to)
,当滚动
字段:
从:1982至:1986 1982<1986至:1964 1982<1964
时,它仍然会进入测试。我不明白为什么这个代码不起作用。正如你所说,这是一个简单的整数计算,不应该是一个问题。为了澄清,我在.h文件中将
\u声明为
NSNumbers
,并将
\u声明为
NSNumbers
。我真的不知道我做错了什么?