【问题标题】:How to display UIDatePicker if user hit the UITextfield Programmatically如果用户以编程方式点击 UITextfield,如何显示 UIDatePicker
【发布时间】:2014-01-09 05:05:10
【问题描述】:

我想仅在用户单击 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];

【问题讨论】:

标签: ios iphone objective-c xcode


【解决方案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];
}

【讨论】:

  • 一个 NSDateFormatter 属性,我用它把日期转换成字符串
【解决方案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

【讨论】:

  • 这是将日期选择器添加到文本字段并获得动画和行为等默认键盘的最佳方式。
  • 是的!并在代码行@HarshIT 方面易于实施
  • @IDEveloper。感谢您的回复。但它不起作用兄弟。如果我点击文本字段,UIDatePicker 将不会显示
  • 您能否更新您的代码,以便我可以编辑并返回@user2930730
【解决方案3】:

在进入此代码之前,您只需要了解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)];

}

【讨论】:

    【解决方案4】:
    • 首先表明你的类符合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;
    

    【讨论】:

      【解决方案5】:

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

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

      然后实现textbeginEditing方法打开日期选择器。

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

      【讨论】:

      • @GGyanendra 辛格。感谢您的回复。但它不会工作兄弟。在“labelChange 方法实现”中出现一些错误。
      • txtDOB.text = date,此行可能导致错误。在(.h 文件)中将其声明为 ivar 或通过 tag.e.g. 获取文本字段的实例。 UITextField *textField = (UITextField *)[self.view viewWithTag:i]; //为txtDOB文本字段设置标签。
      • 没有兄弟... NSLog(@"******日期是%@", creationDate); NSString *date = [dateFormat stringFromDate:sender.date]; txtDOB.text = 日期;这两行是错误兄弟
      • 我会说为什么不使用与文本字段具有相同背景图像的 UIButton(它将模仿文本字段)。我在东部也做了很多。
      • 好的兄弟,如果你有UIButton的代码和textfield一样的背景图,请更新代码。
      【解决方案6】:

      这很简单,试试这个
      当 U 点击 textField 时,该方法被调用。

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

      这将显示日期选择器。
      然后你想在 textField 中显示选定的值

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

      试试这个,然后更新结果

      【讨论】:

      • 你明白了吗?验证我的答案
      【解决方案7】:

      首先启用 userIntraction

      [txtDOB setUserInteractionEnabled:YES];

      并将您的选择器视图添加为此文本文件的输入视图

      [txtDOB setInputView:pickerview]

      【讨论】:

        猜你喜欢
        • 2012-08-19
        • 1970-01-01
        • 1970-01-01
        • 2021-06-04
        • 2011-10-22
        • 1970-01-01
        • 2015-01-04
        • 1970-01-01
        • 2015-02-09
        相关资源
        最近更新 更多