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日期选择器而不是键盘?的主要内容,如果未能解决你的问题,请参考以下文章
Android,有啥方法可以禁用使用键盘在日期选择器内写入?