iPhone日期选择器而不是键盘?

Posted

技术标签:

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

你会怎么做?

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

【问题讨论】:

为什么不使用 UIDatePicker 而不是 UITextField? 你有这个代码吗?我也面临同样的问题 你真的应该改变这个选择的答案。 【参考方案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,而不是尝试自己滚动 - 它会为您节省 很多 的时间和痛苦。

以上是关于iPhone日期选择器而不是键盘?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone:日期选择器 dd/mm/yyyy

日期选择器之外的键盘

使用材料 ui 键盘日期选择器动态设置日期

在 Instruments 中运行的 iPhone 应用程序因无法识别的选择器而失败

点击日期字段时如何调出日期选择器?

iPhone,如何在代码中将日期选择器的最小日期设置为今天?