Время UIDatePicker сбрасывается при изменении режима UIDatePicker на UIDatePickerModeTime? - PullRequest
0 голосов
/ 18 июля 2011

Я использую UIDatePicker в своем приложении для iPhone. Я держал кнопку, нажимая которую режим DatePicker переключается между UIDatePickerModeTime и UIDatePickerModeDate.Когда я меняю дату DatePicker, когда режим UIDatePickerModeDate, измененная дата корректно отображается, когда я переключаю режим, но если я меняю время и переключаю режим, при повторном переключении режима на UIDatePickerModeTime время сбрасывается до 12:00 AM.Я не понимаю, почему это происходит и что для этого нужно сделать. Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 17 августа 2012

У меня похожая проблема. Когда я в первый раз перешел с UIDatePickerModeDate на UIDatePickerModeTime, время было в порядке. Однако, когда я снова переключаюсь в режим ..Date, а затем снова в режим ..Time, время показывается как 00:00. После этого, независимо от количества смен режима, время всегда оставалось в 00:00. Я программно смоделировал свой UIDatePicker так же, как и UIDatePicker в приложении Apple UICatalog. Такое поведение не существует в их приложении.

Под вашим руководством я сохранил значение NSDate из средства выбора в сохраненном @property с намерением получить и сбросить средство выбора при уведомлении UIControl. Однако я не смог найти событие, которое сработало, когда средство выбора было переключено из режима даты в режим времени. Я даже попробовал что-то вроде:

        [myDatePicker addTarget:self action:@selector(getDateTime:) forControlEvents:UIControlEventAllEvents];

Конечно, событие сработало, если я изменил дату (или время) сборщика, но, как я уже говорил, не при смене режима.

В итоге я использовал UISegmentedControl (такой же, как в приложении UICatalog), который нацелен на тот же метод события, что и выше, где я переключал режим. Однако, когда я перезагружал средство выбора на сохраненное значение NSDate, время оставалось в 00:00. Затем я использовал NSLog, чтобы проверить, что сохраненное значение было в порядке, и обнаружил, что его часть значения времени также изменилась на 00:00! Это было действительно странно, так как я не сохранил новое значение NSDate. Исходное сохраненное значение просто изменилось само по себе!

Я все еще изучаю проблему и очень близок к тому, чтобы называть это ошибкой, особенно когда программно добавлен UIDatePicker без поддержки NIB.

Обновление: Мое окончательное решение было почти идентично вашему. По какой-то причине ошибка продолжалась, когда сохраненная дата сохранялась как значение NSDate. Сохранение его в виде строки NSStort и приведение типов в обоих направлениях сделали свое дело:

self.saveDate = (NSString*)self.myDatePicker.date;

...

[self.myDatePicker setDate:(NSDate*)self.saveDate animated:NO];

Кроме того, поскольку я получаю и сохраняю дату на внешнем устройстве через блок dispatch_async GCD, свойство self. нотация также была необходима (даже для main_que).

Окончательный вывод:

Теперь я убежден, что установка даты UIDatePicker при каждом обращении к средству выбора является необходимым требованием, а не ошибкой. Используя приложение Apple UICatalog, когда вы устанавливаете дату на сегодняшний день всего один раз, а затем переключаетесь между режимом «Дата и время», их приложение демонстрирует точно такое же поведение. Дата сохраняется, но время сбрасывается до 00:00. Если вы переключитесь в режим, отличный от даты или времени, и вернетесь назад, все режимы будут сброшены на свои минимальные значения.

0 голосов
/ 25 июля 2011

Я использовал объект Date, который я объявил как свойство, в котором я сохранил дату из средства выбора даты, когда представляю средство выбора даты.Я обновил сохраненную дату, когда я изменяю дату в средстве выбора даты (Использование UIControl Notification). При изменении режима средства выбора даты я назначил эту дату той же дате.

Я понимаю, что это было довольно просто, но раньшеЯ пытался сделать то же самое, взяв простой объект Date, который не работал. Создание свойства сделало всю работу за меня

...