【问题标题】:iPhone datepicker instead of keyboard?iPhone日期选择器而不是键盘?
【发布时间】:2011-06-14 05:11:57
【问题描述】:

你会怎么做?

我有一个带有 UITextField 的表单。当我点击它时,我想显示一个 UIDatePicker 而不是默认弹出的默认键盘?请注意,我的表单上还有其他元素。

【问题讨论】:

  • 为什么不使用 UIDatePicker 而不是 UITextField?
  • 你有这个代码吗?我也面临同样的问题
  • 你真的应该改变这个选择的答案。

标签: iphone forms keyboard uitextfield uidatepicker


【解决方案1】:

我认为这是一种更正式的方式:

UIDatePicker *datePicker = [[[UIDatePicker alloc] init] autorelease];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
datePicker.tag = indexPath.row;
textField.inputView = datePicker;

【讨论】:

  • 这在 iOS 5 中对我不起作用。单击时文本字段仍然显示普通键盘。在使用有效指针设置 textField.inputView 然后立即检查它之后,它又回到了 nil。有人知道为什么吗?我在 viewDidLoad 中设置它。
  • 检查你的 "datePicker" ivar 是否不为零
  • 这工作得很好,但是如何在选择日期后隐藏日期选择器
  • @Noor 您只需辞去文本字段作为第一响应者。例如。 [textField resignFirstResponder];
  • @shashwat 您可以添加一个带有完成按钮的工具栏作为 inputAccessoryView。或者简单地将选择另一个字段视为用户想要使用所选日期的指示。
【解决方案2】:

在.h中

UIDatePicker *datePicker;
NSDate *date;
UIToolbar *keyboardToolbar;

在 ViewDidLoad 中:

if (keyboardToolbar == nil) {
    keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)];
    [keyboardToolbar setBarStyle:UIBarStyleBlackTranslucent];

    UIBarButtonItem *extraSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

    UIBarButtonItem *accept = [[UIBarButtonItem alloc] initWithTitle:@"Accept" style:UIBarButtonItemStyleDone target:self action:@selector(closeKeyboard:)];

    [keyboardToolbar setItems:[[NSArray alloc] initWithObjects: extraSpace, accept, nil]];
}

self.txtDate.inputAccessoryView = keyboardToolbar;

datePicker = [[UIDatePicker alloc] init];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];

self.txtDate.inputView = datePicker;


- (void)datePickerValueChanged:(id)sender{

date = datePicker.date;

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"dd/MM/YYYY"];


[self.txtDate setText:[df stringFromDate:date]];
}

在情节提要中添加到 txtDate -> EditingDidEnd

- (IBAction)establishHour:(id)sender{

hour = hourPicker.date;

NSDateFormatter *hf = [[NSDateFormatter alloc] init];
[hf setDateFormat:@"HH:MM"];

[self.txtHour setText:[hf stringFromDate:hour]];

}

将键盘设置为 DatePicker 并创建一个带有按钮的工具栏来接受选择。

【讨论】:

  • 为提高您的帖子质量,请说明此代码将如何/为何解决问题。
  • - (void)cerrarTeclado:(id)sender{ [self.txtFecha resignFirstResponder]; }
【解决方案3】:

如果有人愿意,我已将 Johan Kool 的答案转换为 swift。我将代码放在 viewDidLoad 中。

let datePicker = UIDatePicker()
datePicker.datePickerMode = UIDatePickerMode.Date
datePicker.addTarget(self, action: "datePickerValueChanged:", forControlEvents: UIControlEvents.ValueChanged)
textField.inputView = datePicker

【讨论】:

    【解决方案4】:
    (IBAction)estableceHora:(id)sender{
       Hora = horaPicker.date;
       NSDateFormatter *hf = [[NSDateFormatter alloc] init];
       [hf setDateFormat:@"HH:MM"];
       [self.txtHora setText:[hf stringFromDate:Hora]];
    }
    

    【讨论】:

      【解决方案5】:

      在 .h 文件中添加:

      UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> 
      

      在 .m 文件中添加:

      {
      
      NSDateFormatter *df = [[NSDateFormatter alloc] init];
      
      df.dateStyle = NSDateFormatterMediumStyle;
      
      pTxtDate.text = [NSString stringWithFormat:@"%@",
      
      [df stringFromDate:[NSDate date]]];
      
      NSLog(@"pTxtDate.text %@",pTxtDate.text);
      
      [df release];
      
      [self.view addSubview:pTxtDate]; 
      
      [pTxtDate release];
      
      DatePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 250, 325, 300)];
      
      DatePicker.datePickerMode = UIDatePickerModeDate;
      
      DatePicker.hidden = NO;
      
      DatePicker.date = [NSDate date];
      
      [DatePicker addTarget:self
      
        action:@selector(LabelChange:)
      
      forControlEvents:UIControlEventValueChanged];
      
      [self.view addSubview:DatePicker];
      
          [DatePicker release];
      
      }
      
      
      
      - (void)LabelChange:(id)sender {
      
      NSDateFormatter *df = [[NSDateFormatter alloc] init];
      
      df.dateStyle = NSDateFormatterMediumStyle;
      
      pTxtDate.text = [NSString stringWithFormat:@"%@",
      
      [df stringFromDate:DatePicker.date]];
      
      }
      

      【讨论】:

      • 请使用内置的 UIDatePicker,而不是尝试自己滚动 - 它会为您节省 很多 的时间和痛苦。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多