Как отобразить UIDatePicker, если пользователь программно нажал на поле UIText
Я хотел бы отображать UIDatePicker только тогда, когда пользователь нажимает UITextField. Когда дата выбрана, она должна быть показана в том же UITextField. Я хочу программно реализовать UIDatePicker. Я знаю, как писать код UITextField программно. Я даже не знаю, как вызвать UIDatePicker.
Дата рождения.
UITextField txtDOB=[[UITextField alloc]initWithFrame:CGRectMake(10, 190, 300, 20)];
txtDOB.borderStyle=UITextBorderStyleNone;
txtDOB.backgroundColor=[UIColor clearColor];
[txtDOB setUserInteractionEnabled:NO];
txtDOB.font=[UIFont systemFontOfSize:14.0];
txtDOB.contentVerticalAlignment=UIControlContentVerticalAlignmentCenter;
txtDOB.textAlignment=NSTextAlignmentLeft;
txtDOB.delegate=self;
[self.view addSubview:txtDOB];
Ответы
Ответ 1
Самый простой способ - реализовать datePicker
следующим образом:
Создайте datePicker:
self.datePicker = [[UIDatePicker alloc] initWithFrame:CGRectZero];
[self.datePicker setDatePickerMode:UIDatePickerModeDate];
[self.datePicker addTarget:self action:@selector(onDatePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
Затем привяжите datePicker
к textfield
inputView:
self.textField.inputView = self.pickerView;
В конце вы можете поймать действие при выборе даты и преобразовать дату в строку, чтобы показать выбранную дату в textfield
- (void)onDatePickerValueChanged:(UIDatePicker *)datePicker
{
self.textField.text = [self.dateFormatter stringFromDate:datePicker.date];
}
Ответ 2
UIDatePicker *picker1 = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 210, 320, 216)];
[picker1 setDatePickerMode:UIDatePickerModeDate];
picker1.backgroundColor = [UIColor whiteColor];
[picker1 addTarget:self action:@selector(startDateSelected:) forControlEvents:UIControlEventValueChanged];
// [picker1 addSubview:toolBar];
self.birthTxt.inputView = picker1; // Here birthTxt is Textfield Name replace with your name
Ответ 3
Перед тем, как перейти к этому коду, вам нужно просто узнать о UIActionSheet
, и вам нужно реализовать UIActionShetDelegate
и UITextFieldDelegate
. В textFieldDidBeginEditing
вам нужно отобразить таблицу действий, как показано ниже:
-(void)textFieldDidBeginEditing:(UITextField *)sender
{
UIActionSheet *asheet = [[UIActionSheet alloc] initWithTitle:@"Select Date" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Select", nil];
[asheet showInView:[self.view superview]];
[asheet setFrame:CGRectMake(0, 117, 320, 383)];
}
- (void)willPresentActionSheet:(UIActionSheet *)actionSheet
{
UIDatePicker *pickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 40, 320, 240)];
[pickerView setMinuteInterval:5];
[pickerView setTag: DatePickerTag];
[actionSheet addSubview:pickerView];
NSArray *subviews = [actionSheet subviews];
[[subviews objectAtIndex:SelectButtonIndex] setFrame:CGRectMake(20, 250, 280, 46)];
[[subviews objectAtIndex:CancelButtonIndex] setFrame:CGRectMake(20, 300, 280, 46)];
}
Ответ 4
Вам нужно добавить правильный селектор, когда редактирование начинается в UITexfield, используйте ниже код
[txtDOB addTarget:self action:@selector(textbeginEditing:) forControlEvents:UIControlEventEditingDidBegin];
И затем выполните метод textbeginEditing, чтобы открыть datepicker.
-(void)textbeginEditing:(id)sender{
UIActionSheet __autoreleasing * date_sheet = [[UIActionSheet alloc] initWithTitle:@"Select the date" delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
date_sheet.tag = 2;
[date_sheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];
CGRect pickerFrame = CGRectMake(0, 40, 0, 0);
UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:pickerFrame];
datePicker.datePickerMode = UIDatePickerModeDate;
datePicker.hidden = NO;
datePicker.date = [NSDate date];
// Implement the method labelChange
[datePicker addTarget:self
action:@selector(labelChange:)
forControlEvents:UIControlEventValueChanged];
[date_sheet addSubview:datePicker];
UISegmentedControl __autoreleasing *closeButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Close"]];
closeButton.momentary = YES;
closeButton.frame = CGRectMake(260, 7.0f, 50.0f, 30.0f);
closeButton.segmentedControlStyle = UISegmentedControlStyleBar;
closeButton.tintColor = [UIColor blackColor];
[closeButton addTarget:self action:@selector(dissmissDatePicker:) forControlEvents:UIControlEventValueChanged];
[date_sheet addSubview:closeButton];
[date_sheet showInView:[[UIApplication sharedApplication] keyWindow]];
[date_sheet setBounds:CGRectMake(0, 0, 320, 400)];
}
labelChange метод реализации
-(void)labelChange:(UIDatePicker *)sender{
NSDateFormatter __autoreleasing *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setTimeZone:[NSTimeZone systemTimeZone]];
[dateFormat setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
dateFormat.dateStyle = NSDateFormatterMediumStyle;
NSString *dateString = [dateFormat stringFromDate:sender.date];
txtDOB.text = dateString;
}
Ответ 5
-
Сначала укажите, что ваш класс соответствует протоколу UITextFieldDelegate
-
Затем в viewDidLoad
установите delegate
и tag
вашего текстового поля.
yourTextField.delegate = self;
yourTextField.tag = 111;
-
Затем реализуем следующий метод делегата:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
if (textField.tag==111) {
[self showDatePicker];
}
return YES;
}
-
Теперь реализуем функцию showDatePicker
- (void)showDatePicker {
datePicker = [[UIDatePicker alloc] init];
datePicker.backgroundColor=[UIColor whiteColor];
UIToolbar *toolbar = [[UIToolbar alloc]init];
[toolbar sizeToFit];
UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(showSelectedDate)];
doneBtn.tintColor = [UIColor whiteColor];
UIBarButtonItem *flexibleSpaceLeft = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
toolbar.backgroundColor = [UIColor colorWithRed:5.0/255.0 green:110.0/255.0 blue:170.0/255.0 alpha:1];
[toolbar setItems:[NSArray arrayWithObjects:flexibleSpaceLeft,doneBtn ,nil]];
[yourTextField setInputAccessoryView:toolBar];
yourTextField.inputView = datePicker;
}
ИЛИ вы можете сделать это просто в viewDidLoad
следующим образом:
datePicker = [[UIDatePicker alloc] init];
datePicker.backgroundColor = [UIColor whiteColor];
UIToolbar *toolbar = [[UIToolbar alloc]init];
[toolbar sizeToFit];
UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self
action:@selector(showSelectedDate)];
doneBtn.tintColor = [UIColor whiteColor];
UIBarButtonItem *flexibleSpaceLeft = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil action:nil];
toolbar.backgroundColor = [UIColor colorWithRed:5.0/255.0 green:110.0/255.0 blue:170.0/255.0 alpha:1];
[toolBar setItems:[NSArray arrayWithObjects:flexibleSpaceLeft, doneBtn , nil]];
[yourTextField setInputAccessoryView:toolbar];
yourTextField.inputView = datePicker;
Ответ 6
Это будет просто, попробуйте это
Когда U щелкнет текстовое поле, этот метод вызывается.
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
Затем мы не хотим отображать клавиатуру.
[textField resignFirstResponder];
Затем, чтобы отобразить datePicker
datePicker=[[UIDatePicker alloc]init];
[datePicker setFrame:CGRectMake(<ur dimension>)];
datePicker.datePickerMode=UIDatePickerModeDateAndTime;
datePicker.timeZone = [NSTimeZone localTimeZone];
[datePicker addTarget:self action:@selector(done) forControlEvents:UIControlEventValueChanged];
На этом отобразится datePicker.
Затем U хочет отобразить выбранное значение в textField
-(void)done
{
NSString *dateStri=[dateFormater stringFromDate:datePicker.date];
[timingTextField setText:[NSString stringWithFormat:@"%@",dateStri]];
}
Попробуйте это и обновите результат
Ответ 7
Сначала сделайте userIntraction enable
[txtDOB setUserInteractionEnabled:YES];
и добавьте представление выбора в качестве входного представления этого текста.
[txtDOB setInputView:pickerview]