我想动态更改UIDatePicker的datePickerMode

时间:2011-04-24 11:03:48

标签: iphone uidatepicker

我希望能够让一个日期选择器输入月 - 日 - 年 - 小时 - 分钟。 我知道两个UIDatePicker对象是否可行。 例如 UIDatePicker obj1; //为月 - 日 - 年 UIDatePicker obj2; //适用于小时 -

但是我不想为一个日期输入设置两个UIDatePicker:month-day-year-hour-minute。 所以我制作了一个UIDatePicker和一个UIButton。 该按钮用于更改UIDatePicker的datePickerMode。

可以更改选择器的数字。 [mm | dd | yyyy]< - > [HH:MM]

但是当选择器的模式改变如下时,

[hh:mm] - > [mm | dd | yyyy] - > [HH:MM]

选择器的小时日期变为00:00,即使在模式改变之前设置为11:59。

为什么?

月 - 日 - 年不变,但模式已更改。

2 个答案:

答案 0 :(得分:1)

  

选择器的小时日期变为00:00,即使在模式改变之前设置为11:59也是如此。为什么呢?

可能是因为日期选择器将日期设置为午夜,如果它是mm | dd | yyyy模式。因此,您必须将选定的时间存储在单独的NSDate对象中,当用户从mm | dd | yyyy切换到hh:mm时,将日期选择器的日期设置为正确的日期和时间(通过提取时间)通过NSDateComponents从另一个日期和年/月/日开始分钟,并与所有组件合成一个新日期。

答案 1 :(得分:0)

感谢您的回答。

我在原始代码中添加了3行,如下所示 到目前为止似乎很好。

    - (IBAction) switchDateTime {
  switch (datePicker_.datePickerMode) {
    case UIDatePickerModeDate: {
      datePicker_.datePickerMode = UIDatePickerModeDateAndTime;
      [swBtn_ setTitle:NSLocalizedString(@"swichBtn_date", @"") forState:UIControlStateNormal];
    } break;
    case UIDatePickerModeDateAndTime: {
      NSDate *tmp = [datePicker_.date copy];//<- added
      datePicker_.datePickerMode = UIDatePickerModeDate;
      datePicker_.date = tmp;               //<- added
      [tmp release];
      [swBtn_ setTitle:NSLocalizedString(@"swichBtn_time", @"") forState:UIControlStateNormal];
    } break;
    default:
      assert(0);
      break;
  }
}