UIDatePicker 用于设置 UITextfield 文本



我有一个UITextField和一个UIDatePicker,我想用它来设置用户的生日。

我在viewDidLoad中使用此代码:

UIDatePicker *datePicker = [[UIDatePicker alloc] init];
birtdayTextField.inputView = datePicker;

但是我有 2 个问题。我在故事板的视图中放置了一个UIDatePicker。但它仍然打开了一个新的datepicker即使我已经将*datepicker连接到UIDatePicker

而且它也不会将datepicker中的信息添加到textfield

输入视图不起作用。您可以创建懒惰UIDatePicker

- (UIDatePicker *)bDatePicker {
    if (!_bDatePicker) {
        _bDatePicker = [UIDatePicker new];
        _bDatePicker.datePickerMode = UIDatePickerModeDate;
        [_bDatePicker addTarget:self action:@selector(datePickerDidChangeDate:) forControlEvents:UIControlEventValueChanged];
    }
    return _bDatePicker;
}

然后像下面这样设置:

self.birtdayTextField.inputView = self.bDatePicker;

这是回调:

- (void)datePickerDidChangeDate:(UIDatePicker *)sender {
    self.birtdayTextField.text = [self.bDateFormatter stringFromDate:sender.date];
}

可能的格式化程序:

- (NSDateFormatter *)bDateFormatter {
    if (!_bDateFormatter) {
        _bDateFormatter = [NSDateFormatter new];
        _bDateFormatter.dateFormat = @"dd.MM.yyyy";
    }
    return _bDateFormatter;
}

为了防止将错误的数据粘贴到该文本字段中,您可以使用它的delegate

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    return textField != self.birtdayTextField;
}