Можно ли «сбросить» выделенный месяц / день / год UIDatePicker? - PullRequest
1 голос
/ 20 февраля 2009

У меня есть View Controller, который я снова использую для редактирования отдельных объектов (NSString, NSNumber, NSDate) в TableView предыдущего View Controller. Я свободно основываюсь на EditingViewController в примере проекта Apple SQLiteBooks. DatePicker создается в файле пера.

Проблема здесь в том, что она отлично работает и отлично подходит для первого свидания, которое я ей назначил. НО, при повторном вызове на 2-й дате он будет правильно отображать следующую дату, которую я редактирую, в своих тумблерах (?) При загрузке, однако выделенные (синим) месяц, день и год - это те, с которых сборщик был первым отображается перед первым редактированием. Как я могу установить эти выделенные значения в начальное значение 2-го объекта даты или сбросить весь экземпляр UIdatePicker.

2-й связанный вопрос (бонусные баллы ;-), поскольку я изо всех сил стараюсь обернуть голову вокруг Какао: почему в примере SQLiteBooks нет операторов @property или @synthesize для datePicker, объявленного в EditingVewController.h? Или я упустил очевидное? Спасибо!

Редактировать: После некоторых экспериментов с другими приложениями, использующими UIDatePickers, кажется, что по какой-то причине UIDatePicker при использовании в режиме даты будет выделять текущий месяц, день и год, даже если вы редактируете дату, скажем, с 1776. КАК мы можем выключить это поведение?

Ответы [ 2 ]

1 голос
/ 20 февраля 2009

Сохраните дату от первого сборщика, например, storedDate. Затем установите дату, которая будет отображаться в вашем UIDatePicker, используя его свойство date. Предположим, что ваш UIDatePicker назван picker, тогда

 picker.date = storedDate; // picker's date is initialised to today's date/time

Вы также можете использовать этот метод, если хотите, чтобы сборщик анимировал к вашей дате:

[picker setDate:storedDate animated:YES];

Что касается свойств, то они не должны использоваться только для публичных данных. Свойства относятся к данным, доступ к которым осуществляется через методы, а не напрямую через переменные экземпляра. Объявления свойств (в частности, @synthesize) говорят компилятору использовать эти объявления для автоматической генерации методов доступа по мере необходимости для удовлетворения интерфейса вашего класса.

Синтаксис точек в Objective-C переводится компилятором в вызов методов доступа. Итак ...

foo.bar = @"hello";

переводится компилятором в ...

[foo setBar:@"hello"];

setBar, также сгенерированный, будет делать все, что должен в соответствии с его объявлениями @property. Поэтому, если он объявлен как сохраненный, он будет правильно сохранен в своем установщике, и вам не придется об этом беспокоиться.

Итак, в заключение, хотя упомянутый вами код Apple может работать правильно (я не смотрел), было бы лучше использовать защитное кодирование для использования свойств.

0 голосов
/ 20 февраля 2009

2-й связанный вопрос (бонусные баллы ;-), поскольку я изо всех сил пытаюсь обернуть голову вокруг Какао: почему в примере SQLiteBooks нет операторов @property или @synthesize для datePicker, объявленного в EditingVewController.h? Или я упустил очевидное? Спасибо!

Вам нужно объявить @property, только если вы хотите сделать свойство общедоступным. Для закрытых переменных экземпляра вы оставляете это вне.

И у @synthesize просто есть компилятор, создающий методы доступа для вашего @property, поэтому, если это не @property, вы не используете @synthesize (или @dynamic).

...