Swift 当样式为.compact时,选择后关闭UIDatePicker

Swift 当样式为.compact时,选择后关闭UIDatePicker,swift,xcode,uidatepicker,xcode-storyboard,Swift,Xcode,Uidatepicker,Xcode Storyboard,使用Swift的故事板应用程序 用户选择日期后,如何关闭日历(当UIDatePicker样式为.compact时,用于选择日期)?目前,用户需要点击日历外部,日历才能关闭。我希望它在用户选择日期后自动关闭 我已尝试辞去UIDatePicker的第一响应者,在收到日期更改的通知后结束在表视图控制器中的编辑,读取另一个响应(),但到目前为止,我没有任何效果。现在,您可以做: presentedViewController?.dismiss(animated: true, completion: ni

使用Swift的故事板应用程序

用户选择日期后,如何关闭日历(当UIDatePicker样式为.compact时,用于选择日期)?目前,用户需要点击日历外部,日历才能关闭。我希望它在用户选择日期后自动关闭

我已尝试辞去UIDatePicker的第一响应者,在收到日期更改的通知后结束在表视图控制器中的编辑,读取另一个响应(),但到目前为止,我没有任何效果。

现在,您可以做:

presentedViewController?.dismiss(animated: true, completion: nil)
i、 e

但请注意,这可能会在未来的iOS版本中出现中断,因为这取决于
compact
日期选择器提供视图控制器以显示日历的实现细节。如果打印出显示的VC的类型,您将看到
\u UIDatePickerIOSCompactViewController
。前导的
\uu
表明这是一个实现细节

有关
compact
的所有文档包括:

一种样式,指示日期选择器显示为标签,点击时显示日历样式编辑器


因此,在未来的iOS版本中,他们可以将实现更改为不提供新的视图控制器,这很可能会中断,然后您必须找到另一种方法。我现在看不到有文件证明的方法可以做到这一点。

这正是我所需要的,并解决了我的问题。我的具体实现是一个UITableViewController,表中的每一行都有一个日期选择器,因此我在cellForRowAt中为每个日期选择器添加了目标。效果很好。希望它不会很快坏掉!
override func viewDidLoad() {
    super.viewDidLoad()
    datePicker.addTarget(self, action: #selector(dateChanged), for: .valueChanged)
}

@objc private func dateChanged() {
    presentedViewController?.dismiss(animated: true, completion: nil)
}