为什么我要两次点击UIDatePicker来设置时间?

时间:2013-07-28 19:01:42

标签: objective-c ios6 uidatepicker

我有一个UIDatePicker,我想在textField中设置为字符串值。当我点击第二个textField时,我希望UIDatePicker获取第一个textField中的值,并将其用作datePicker中的开始时间。

这样可以正常工作,但只有当我点击第二个textField两次时才能正常工作。我第一次点击它时,文本字段被选中(变成黄色),时间设置为每个时间的上午6:00 !当我再次点击textField时,timePicker设置正确...

这是点击一次的结果:

enter image description here

这是第二次点击的结果:

enter image description here

更新:这是为点击实现的代码:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{

[textField resignFirstResponder];   //  don't display the k/b

if (textField.tag == kStartTimeTag)  {
    textFieldTag = kStartTimeTag;
    textField.backgroundColor = [UIColor colorWithRed:252.0/255.0 green:255.0/255.0 blue:197.0/255.0 alpha:1.0];
}
else if (textField.tag == kEndTimeTag)  {
    textField.backgroundColor = [UIColor colorWithRed:252.0/255.0 green:255.0/255.0 blue:197.0/255.0 alpha:1.0];    
    textFieldTag = kEndTimeTag;

    //  now, set end time equal to start time
    [self.oTimePicker setDate:dateFromString(oStartTime.text, @"HH:mm")];

}

return NO;

}

有没有办法让这个工作在第一次点击?

2 个答案:

答案 0 :(得分:1)

我不确定您的代码有什么问题,因为您没有在函数dateFromString()中显示您正在执行的操作。下面的代码只需点击一下就可以了:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{

    [textField resignFirstResponder];   //  don't display the k/b

    if (textField.tag == 1)  {
        textField.backgroundColor = [UIColor colorWithRed:252.0/255.0 green:255.0/255.0 blue:197.0/255.0 alpha:1.0];
    }
    else if (textField.tag == 2)  {
        textField.backgroundColor = [UIColor colorWithRed:252.0/255.0 green:255.0/255.0 blue:197.0/255.0 alpha:1.0];
        NSDate *startDate = [self timeFromString:self.oStartTime.text];
        [self.oTimePicker setDate:startDate];
    }
    return NO;
}

-(NSDate *)timeFromString:(NSString *)  timeString {
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"HH:mm";
    return [formatter dateFromString:timeString];
}

答案 1 :(得分:1)

对于任何需要做我需要做的事情的人来说,这是解决方案:

    [self.oTimePicker setDate:dateFromString(self.oStartTime.text, @"HH:mm")];
    [self.oTimePicker reloadInputViews];

键是第二行:-reloadInputViews

感谢大家的建议......