【问题标题】:UIDatePicker not updating UITextFieldUIDatePicker 不更新 UITextField
【发布时间】:2015-11-03 11:11:36
【问题描述】:

我一直在使用大量教程和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 中缺少的东西。

【问题讨论】:

    标签: ios objective-c xcode uitextfield uidatepicker


    【解决方案1】:

    因为您在触摸完成按钮时退出 _birthdayField。

    所以 updateTextfield 中的代码如果块永远不会被调用。

    【讨论】:

    • 如何阻止它这样做?删除 if 块没有任何区别
    【解决方案2】:

    在玩了之后,我发现了这个问题。 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 对我来说很重要!我还添加了我想要的格式。

    【讨论】:

      猜你喜欢
      • 2014-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多