Средство выбора даты iPhone, как получить доступ к отдельным элементам

Задача: показать UIDatePicker и захватить выбранную дату, затем отобразить выбранную дату в метке (в формате дня, месяца, года).

Текущий прогресс:

-(IBAction)pressButton:(id)sender
{
    NSDate *selected = [datePicker date];
    NSString *message = [[NSString alloc] initWithFormat:@"%@", selected];

    date.text = message;
}

Это отобразит дату в формате ГГГГ-ММ-ДД 23:20:11 +0100. Я не хочу показывать время. Я также хочу отображать дату в другом формате.

Можно ли получить доступ к отдельным компонентам средства выбора даты, т.е. datePicker.month

Любые решения или ссылки приветствуются.


person Andrew Davis    schedule 05.07.2010    source источник


Ответы (3)


Вам нужен метод descriptionWithCalendarFormat:timeZone:locale:. См. Описание метода Apple.

Например, чтобы отобразить дату только в формате ГГГГ-ММ-ДД, вы должны использовать:

NSString *message = [selected descriptionWithCalendarFormat: @"%Y-%m-%d" timeZone: nil locale: nil]

Я считаю, что в строке формата здесь используются те же токены, что и в strptime из стандартной библиотеки C, но, зная Apple, могут быть некоторые незначительные несоответствия. Описание этого формата находится здесь.

Вы также можете использовать класс NSDateFormatter 'stringFromDate: method. Он использует другой формат (формат Unicode). Я считаю, что это «предпочтительный» способ форматирования строк даты в Objective C, но он, вероятно, также немного сложнее в использовании.

Наконец, см. этот вопрос SO для получения информации об извлечении отдельных компонентов NSDate.

Надеюсь, это поможет.

person Mitch Lindgren    schedule 05.07.2010
comment
Большое спасибо за все ответы, использовал эту строку и все разобрал. - person Andrew Davis; 07.07.2010
comment
Поскольку вы нашли этот ответ полезным, вы можете проголосовать за него и / или отметить его правильным в интересах других пользователей :) - person Mitch Lindgren; 04.10.2010

Если вы говорите о доступе к отдельным компонентам средства выбора даты, вы не можете. UIDatePicker не наследуется от UIPickerView, поэтому у них нет API. Однако в документации действительно указано, что UIDatePicker «управляет настраиваемым объектом-средством выбора как вложенным представлением», что означает, что вы можете перемещаться по вложенным представлениям UIDatePicker, пока не найдете UIPickerView. Однако учтите, что это довольно рискованно.

person Community    schedule 05.07.2010
comment
OP хочет компоненты даты, то есть день, месяц, год. Вы можете получить дату из UIDatePicker, используя [UIDatePicker date], а затем получить отдельные компоненты из этого, используя NSDateComponents. - person Mitch Lindgren; 06.07.2010

Datepicker - это частный случай uipickerview, поэтому вы можете получить значение в каждом компоненте, но я не перед Xcode, чтобы проверить это.

Однако вы можете использовать NSDateFormatter, чтобы изменить возвращаемый вам nsdateformatter в любой формат, который вы ищете.

person AtomRiot    schedule 05.07.2010