【问题标题】:Close UIDatePicker after selection when style is .compact当样式为 .compact 时,选择后关闭 UIDatePicker
【发布时间】:2023-04-07 03:32:01
【问题描述】:

使用 Swift 的故事板应用程序。

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

我已经尝试让 UIDatePicker 的第一响应者辞职,一旦收到日期更改的通知,就结束在表格视图控制器中的编辑,阅读另一个响应 (here),到目前为止,我没有任何工作。

【问题讨论】:

    标签: swift xcode uidatepicker xcode-storyboard


    【解决方案1】:

    现在,你可以这样做:

    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 版本中,他们可以改为更改实现以不提供新的视图控制器,这很可能会中断,届时您将不得不寻找另一种方法。我现在没有看到任何记录在案的方法。

    【讨论】:

    • 这正是我所需要的并解决了我的问题。我的具体实现是一个UITableViewController,表中的每一行都有一个日期选择器,所以我在cellForRowAt中为每个日期选择器添加了目标。效果很好。希望它不会很快坏掉!
    • 我们需要这种解决方法是荒谬的。 UIDatePicker API 很尴尬。
    猜你喜欢
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多