如果用户以编程方式点击 UITextfield,如何显示 UIDatePicker



我想仅在用户单击UITextField时才显示UIDatePicker。选取日期时,它应显示在同一个 UITextField 中。我想以编程方式实现 UIDatePicker。我知道如何以编程方式编写UITextField的代码。我什至不知道如何称呼UIDatePicker。

出生日期.m

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];

最简单的方法是实现datePicker如下:

创建datePicker:

self.datePicker = [[UIDatePicker alloc] initWithFrame:CGRectZero];
[self.datePicker setDatePickerMode:UIDatePickerModeDate];
[self.datePicker addTarget:self action:@selector(onDatePickerValueChanged:) forControlEvents:UIControlEventValueChanged];

然后将datePicker链接到textfield输入视图:

self.textField.inputView = self.pickerView;

最后,您可以捕获选择日期时的操作,并将日期转换为字符串,以在textField中显示所选日期

- (void)onDatePickerValueChanged:(UIDatePicker *)datePicker
{
    self.textField.text = [self.dateFormatter stringFromDate:datePicker.date];
}
    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

在转到此代码之前,您只需要了解UIActionSheet并且您需要实现UIActionShetDelegateUITextFieldDelegatetextFieldDidBeginEditing中,您需要显示如下操作表:

-(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)];
}
  • 首先指出您的类符合UITextFieldDelegate协议

  • 然后在viewDidLoad中设置文本字段的delegatetag

     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;
<</div> div class="one_answers"> 在

UITexfield上开始编辑时,您需要添加适当的选择器,请使用以下代码

 [txtDOB addTarget:self action:@selector(textbeginEditing:) forControlEvents:UIControlEventEditingDidBegin];

然后执行文本开始编辑方法以打开日期选择器。

-(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)];
}

标签更改方法实现

-(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; 
}

这很简单,试试这个
当您单击文本字段时,将调用此方法。

-(void)textFieldDidBeginEditing:(UITextField *)textField
{  

然后,我们不想显示键盘。

[textField resignFirstResponder];  

然后,显示日期选取器

datePicker=[[UIDatePicker alloc]init];
[datePicker setFrame:CGRectMake(<ur dimension>)];
datePicker.datePickerMode=UIDatePickerModeDateAndTime;
datePicker.timeZone = [NSTimeZone localTimeZone];
[datePicker addTarget:self action:@selector(done) forControlEvents:UIControlEventValueChanged];  

这将显示日期选取器。
然后,您要在文本字段中显示所选值

-(void)done
{
  NSString *dateStri=[dateFormater stringFromDate:datePicker.date];
    [timingTextField setText:[NSString stringWithFormat:@"%@",dateStri]];
}  

试试这个,并更新我的结果

首先使用户启用

[txtDOB setUserInteractionEnabled:YES];

并将选取器视图添加为此文本的输入视图

[txtDOB setInputView:pickerview]

最新更新