我一直在使用多项教程和stackoverflow
答案来拼凑这些内容。我有一个UITextField
当用户点按UIDatePicker
(而不是键盘)时。关闭日期选择器后,TextField
应使用所选日期进行更新。
然而,无论你改变什么,它都只有当前的日期/时间。我错过了什么?我希望它格式化为 MM / dd / yyyy 。
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
//birthday view
UIDatePicker *datePicker = [[UIDatePicker alloc] init];
UIToolbar *doneBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), 44)];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(updateTextField:) forControlEvents:UIControlEventValueChanged];
_birthdayField.inputView = datePicker;
[_birthdayField setInputAccessoryView:doneBar];
[doneBar setBarStyle:UIBarStyleDefault];
UIBarButtonItem *spacer = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil
action:nil];
[doneBar setItems: [NSArray arrayWithObjects:spacer, [[UIBarButtonItem alloc]
initWithTitle:@"Done"
style:UIBarButtonItemStyleDone
target:self
action:@selector(datePickerDone:)],nil ] animated:YES];
}
- (IBAction)datePickerDone:(id)sender {
[_birthdayField resignFirstResponder];
}
-(void)updateTextField:(id)sender {
if([_birthdayField isFirstResponder]) {
UIDatePicker *picker = (UIDatePicker*)_birthdayField.inputView;
_birthdayField.text = [NSString stringWithFormat:@"%@", picker.date];
}
}
我认为这是我在updateTextField中缺少的东西。
答案 0 :(得分:0)
因为在触摸完成按钮时你退出_birthdayField。
因此,如果块永远不会被调用,则updateTextfield中的代码。
答案 1 :(得分:0)
在玩完之后我发现了这个问题。 Bseh的回答没有适用,因为当我在updateTextField中放置一个断点时,肯定会遇到它。我更改了以下内容:
- (void)updateTextField:(UIDatePicker *)sender {
NSDateFormatter *datePickerFormat = [[NSDateFormatter alloc] init];
[datePickerFormat setDateFormat:@"MM / dd / yyyy"]; //here specify your format..
NSString *dateString = [datePickerFormat stringFromDate:sender.date];
self.birthdayField.text = dateString;
}
将id
更改为UIDatePicker
对我有所帮助!我还添加了我想要的格式。