【问题标题】:Can I set the iOS Date picker default date to be blank?我可以将 iOS 日期选择器的默认日期设置为空白吗?
【发布时间】:2022-11-15 11:08:46
【问题描述】:

我正在尝试将 iOS UIDatePicker 设置为具有空白默认日期而不是当前日期。这可能吗?

【问题讨论】:

  • UIDatePicker的模式和风格是什么? “空白”默认值会显示什么?你到底想达到什么目的?
  • 样式紧凑。它默认加载到当前日期,但我希望默认日期为空。用例是日期可以为空,因此如果用户不需要输入日期,则不应有默认值。

标签: ios swift xcode uidatepicker


【解决方案1】:

这是不可能的。初始日期有一个 date 属性。如果 nil 它默认为“现在”。如果您尝试使用类似 Date.distantPast 的名称,它实际上会将日期设置为 1 月 31 日。那是第 1 年。

我建议向 Apple 提交增强请求。

同时,您可以在标签旁边使用自己的按钮。让按钮显示 UIDatePicker,并将 preferredDateStype 设置为 .inline。通过正确的设置,您可以支持具有“可为空”的日期。我在我的一个应用程序中做了类似的事情。

【讨论】:

    【解决方案2】:

    您可以像这样使用 pikerView:

    声明您的月份数组(或您喜欢的),使您的控制器符合 UIPickerViewDelegate 和 UIPickerViewDataSource:

    class Prova: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
    
    let months: [String] = [" " ,"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] // months array
    
    let pickerView = UIPickerView()
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        view.backgroundColor = .white
    
        pickerView.delegate = self
        pickerView.dataSource = self
        pickerView.translatesAutoresizingMaskIntoConstraints = false
        
        //set constraints
        view.addSubview(pickerView)
        pickerView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
        pickerView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
        pickerView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
        pickerView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
    }
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
            return 1
    }
    
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            return months.count
    }
    
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
            return months[row]
    }
    
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    // do whatever you want when specific row is selected
    }
    
    func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
    
        let rowTitle = months[row]
        let pickerLabel = UILabel()
    
        pickerLabel.textColor = .black
    
        pickerLabel.text = rowTitle
        pickerLabel.font = .systemFont(ofSize: 16)
        pickerLabel.textAlignment = .center
    
        return pickerLabel
     }
    }
    

    这是结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-09
      • 2012-11-20
      • 1970-01-01
      • 2014-03-19
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多