#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.