Как использовать UIDatePicker?

#iphone #objective-c #uidatepicker

#iPhone #objective-c #uidatepicker

Вопрос:

У меня есть кнопка в viewControler, с помощью которой я хочу вызвать UIDatePicker. Я думаю, мне нужно будет анимировать его ввод / вывод.

Пока что у меня есть настройка кнопки, и у меня есть UIDatePicker в моем IB в отдельном представлении. Я думаю, что было бы разумнее использовать его модально.

Какой код необходим, чтобы связать UIDatePicker, чтобы он отображался нажатием кнопки, а затем выдвигался?

Спасибо.

Ответ №1:

Вы могли бы избавить себя от лишних хлопот и установить UIDatePicker в качестве «клавиатуры» для вашего UITextField. Вот так:

 UIDatePicker *datePicker = [UIDatePicker new];
self.dateField.inputView = datePicker;
  

Таким образом, он действует точно так же, как клавиатура, и анимирует вход и выход по мере необходимости. Вы используете методы делегирования текстового поля, чтобы сообщить ему об удалении. Простой способ достаточно сложен. Это моя философия 😉

Комментарии:

1. Я полностью согласен с тобой @Matjan

2. @erdemgc, попробуйте вызвать «resignFirstResponder» в inputView

3. Хорошая идея, за исключением того, что вы не можете закрыть средство выбора. 🙁

Ответ №2:

Вы хотите сохранить ссылку на свой UIDatePicker, а затем вы можете использовать UIView для анимации ввода и вывода указателя даты. Я бы обернул средство выбора в UIView, чтобы вы могли добавить кнопку скрытия или связанные элементы управления.

В вашем заголовочном файле:

 @interface MyControllerWithSlidingDatePicker : UIViewController{

  //If you use Interface builder, use this
  IBOutlet IDatePicker *picker; 
  //If you aren't using IB, use this
  //UIDatePicker *picker; 

}

@property (nonatomic, retain) UIDatePicker *picker;

@end
  

И ваш файл реализации:

 #import "MyControllerWithSlidingDatePicker.h"

@implementation MyControllerWithSlidingDatePicker

  - (id) init{
    self = [super init];
    if(self){
       //If you use Interface Builder, skip this part.

       UIDatePicker *dp = [[UIDatePicker alloc] init];
       //Configure your picker

       self.picker = dp;

       [dp release];

    }

    return self;  
  }

 - (IBAction)slidePickerIn{
   //Position the picker out of site
   [self.picker setFrame:CGRectMake(0,self.view.frame.size.height,self.width,self.picker.frame.size.height];

   //Add the picker to the view
   [self.view addSubview:self.picker];

   //This animation will work on iOS 4
   //For older iOS, use "beginAnimation:context"
   [UIView animateWithDuration:1.0 animations:^{

      [self.datePicker setFrame:CGRectMake0,self.view.frame.size.height-self.datePicker.frame.size.height,self.datePicker.frame.size.width,self.datePicker.frame.size.height];

   }  

 }

 - (void)dealloc{
   [picker release];
   [super dealloc];
 }

@end
  

Чтобы анимировать out, вы просто создаете другой метод для изменения фрейма на исходный «закадровый» фрейм.

Комментарии:

1. Спасибо, Моше, я собираюсь попробовать реализовать это сейчас. Но один вопрос: я бы просто вызвал slidePickerIn метод при нажатии кнопки, чтобы инициировать это новое представление datepicker, верно?

2. Выбор даты настраивается методом инициализации. Это один и тот же datepicker все время. Теоретически вы можете создавать новый каждый раз, но тогда вам придется постоянно поддерживать ссылку на него, чтобы вы могли снова скрыть его.

3. Я имею в виду, что у меня есть кнопка в моем представлении, когда я нажимаю на кнопку, только тогда я хочу увидеть DatePicker. И когда я выбираю дату, средство выбора должно исчезнуть, и я вернусь к своему первоначальному виду.

4. Подождите. @Faisal, ты можешь зайти в чат SO?

5. Конечно, я сейчас в чате iOS.