Я хочу динамически изменить datePickerMode для UIDatePicker - PullRequest
0 голосов
/ 24 апреля 2011

Я хочу, чтобы средство выбора даты могло вводить месяц-день-год-час-минута. Я знаю, если два объекта UIDatePicker было возможно. например UIDatePicker obj1; // за месяц-день-год UIDatePicker obj2; // за час-минуту

Но я не хочу иметь два UIDatePicker для ввода одной даты: месяц-день-год-час-минута. Поэтому я сделал один UIDatePicker и одну UIButton. Кнопка предназначена для изменения datePickerMode UIDatePicker.

Фигура сборщика может быть изменена. [мм | дд | гггг] <-> [чч: мм]

Но когда режим сборщика меняется следующим образом,

[чч: мм] -> [мм | дд | гггг] -> [чч: мм]

часовая дата сборщика становится 00:00, даже если она установлена ​​как 11:59 до изменения режима.

Почему?

Месяц-день-год никогда не меняется, однако режим меняется.

Ответы [ 2 ]

1 голос
/ 24 апреля 2011

часовая дата сборщика становится 00:00, даже если она установлена ​​как 11:59 до изменения режима.Почему?

Возможно, потому, что средство выбора даты хранит даты со временем, установленным на полночь, если оно находится в режиме mm | dd | yyyy.Таким образом, вам придется хранить выбранное время в отдельном объекте NSDate, а когда пользователь переключается с mm | dd | гггг на чч: мм, установить дату выбора даты на правильные дату и время (извлекая время и минутыот одной даты и года / месяца / дня от другой через NSDateComponents и составление новой даты со всеми компонентами).

0 голосов
/ 25 апреля 2011

Спасибо за ваш ответ.

Я добавил 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;
  }
}
...