当样式为.compact时,在选择日期后关闭UIDatePicker

12

使用Swift编写故事板应用程序。

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

我尝试了UIDatePicker的resigning first responder方法,在表视图控制器中接收到日期更改通知后结束编辑,阅读了另一个回答(这里),但目前没有任何作用。

1个回答

14

目前,你可以做:

presentedViewController?.dismiss(animated: true, completion: nil)
即。
override func viewDidLoad() {
    super.viewDidLoad()
    datePicker.addTarget(self, action: #selector(dateChanged), for: .valueChanged)
}

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

请注意,这将有可能在未来的iOS版本中出现问题,因为它依赖于一个实现细节,即compact日期选择器将呈现一个视图控制器来显示日历。如果您打印出已呈现VC的类型,您将看到_UIDatePickerIOSCompactViewController。前导_表明这是一个实现细节。

所有关于compact的文档都是:

一种样式,表示日期选择器显示为标签,当被点击时会显示一个类似于日历的编辑器。

因此,在未来的iOS版本中,他们可以改变实现方式,不再呈现新的视图控制器,这很可能会导致问题,那时你将不得不寻找另一种方法。我现在没有发现任何官方文档提供解决方案。


3
这正是我需要的并解决了我的问题。我的具体实现是UITableViewController,表格中的每一行都有一个日期选择器,因此我在cellForRowAt中为每个日期选择器添加了目标(target)。效果很好。希望它不会很快出现问题! - Dwigt
6
我们需要使用这种解决方法,实在是太荒谬了。UIDatePicker API 简直令人尴尬。 - teradyl
1
仍然在iOS 16上运行良好。 - Carl Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接