【问题标题】:How to set time picker at top of inline style Date picker in iOS 14?如何在 iOS 14 的内联样式日期选择器顶部设置时间选择器?
【发布时间】:2021-02-08 15:07:51
【问题描述】:

我已经为 iOS 14 设置了内联样式日期。在这个日期选择器中,计时器选择器显示在底部。我想在内联样式日期选择器顶部显示该时间选择器,就像在 iOS 默认日历应用程序中显示一样。

我的应用屏幕截图:

iOS 默认日历应用截图:

【问题讨论】:

  • 您可以只创建 2 个日期选择器,一个用于日期,一个用于时间
  • @TLGCodin' 感谢您的回答。你知道如何在时间选择器上停止显示键盘吗?
  • 对不起,我不知道。我建议你再开一个关于它的问题
  • 我添加了我的评论作为答案,请看一下。

标签: ios objective-c swift uidatepicker ios14


【解决方案1】:

UIKit 不正式支持内联UIDatePicker 内日期选择器上方的时间选择器。

但是,您可以只创建 2 个日期选择器,一个用于日期,一个用于时间,然后根据需要进行排列。

我制作的这段代码可能会对你有所帮助:

let time = timePicker.date
var date = datePicker.date
date = Calendar.current.startOfDay(for: date)

let calendar = Calendar.current

var timeInterval: TimeInterval = 0
timeInterval += Double(calendar.component(.second, from: time))
timeInterval += Double(calendar.component(.minute, from: time)) * 60
timeInterval += Double(calendar.component(.hour, from: time)) * 3600

date.addTimeInterval(timeInterval)

然后使用变量 date ,一切都应该像在常规日期和时间日期选择器中一样工作。

【讨论】:

    【解决方案2】:
    //Date Time Picker
    extension UIViewController {
        
        func setUpDatePicker(dateFormat: String, startDate : Date,timePicker : Bool, completion: @escaping (_ selectedDate: String)->()) {
            
            let datePicker = UIDatePicker()
            datePicker.minimumDate = startDate
            
            if timePicker == true {
                
                datePicker.datePickerMode = .time
            }
            
            if #available(iOS 14, *) {
                datePicker.preferredDatePickerStyle = .wheels
                datePicker.sizeToFit()
            }
    
            let dateChooserAlert = UIAlertController(title: "Choose Date", message: nil, preferredStyle: .actionSheet)
            datePicker.frame = CGRect(x: 0, y: 50, width: self.view.bounds.width, height: 200)
            dateChooserAlert.view.addSubview(datePicker)
            dateChooserAlert.addAction(UIAlertAction(title: "Done", style: .cancel, handler: { action in
                
                // Your actions here if "Done" clicked...
                let dateformat = DateFormatter()
                if timePicker == true {
                    
                    dateformat.timeStyle = .medium
                    completion(dateformat.string(from: datePicker.date))
                }
                else{
                    
                    dateformat.dateFormat = dateFormat
                    completion(dateformat.string(from: datePicker.date))
                }
                
            }))
            let height: NSLayoutConstraint = NSLayoutConstraint(item: dateChooserAlert.view as Any, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.1, constant: 300)
            dateChooserAlert.view.addConstraint(height)
            self.present(dateChooserAlert, animated: true, completion: nil)
        }
    }
    
    //Use
    
    self.setUpDatePicker(dateFormat: "MM/dd/yyyy", startDate: Date(), timePicker: false, completion: { (selectedDate) in
                
    
                      print(selectedDate)
    })
    

    【讨论】:

    • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2019-08-24
    • 1970-01-01
    相关资源
    最近更新 更多