是否可以格式化 UIDatePicker?

Is it possible to format a UIDatePicker?

请问是否可以格式化UIDatePicker

我希望在日期之前使用工作日作为字符串,例如 "Monday 01.01.2018"。我已经看到很多次了,但我什么也没找到。

目前只显示日期,前面没有星期。

我到处搜索,但没有找到答案。

如果您只显示日期并且还想查看星期几,您可能需要实现自己的 UIPickerView

例如,这将创建一个单组件选择器。而且,因为根据你住的地方,01.02.2019 可能被解释为 1 月 2 日或 2 月 1 日,我可能会建议使用像 EEEMMMdyyyy 这样简洁、本地化且明确的本地化格式:

class ViewController: UIViewController {

    @IBOutlet weak var pickerView: UIPickerView!

    private var startDate: Date!
    private var endDate: Date!

    private let formatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.setLocalizedDateFormatFromTemplate("EEEMMMdyyyy")
        return formatter
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        configurePicker()
    }

    func configurePicker() {
        // you can also hook up delegate and datasource in IB if you prefer

        pickerView.dataSource = self
        pickerView.delegate = self

        // set the range of dates to whatever is appropriate for your app

        let now = Date()
        startDate = now
        endDate = Calendar.current.date(byAdding: .year, value: 1, to: now)
    }

}

extension ViewController: UIPickerViewDataSource {
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return Calendar.current.dateComponents([.day], from: startDate, to: endDate).day!
    }
}

extension ViewController: UIPickerViewDelegate {
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        let date = Calendar.current.date(byAdding: .day, value: row, to: startDate)!
        return formatter.string(from: date)
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        let date = Calendar.current.date(byAdding: .day, value: row, to: startDate)!
        print(formatter.string(from: date))
    }
}

产量(对于美国用户):

现在,如果您想同时拥有自定义日期字符串格式和多个组件(例如,日、月和年作为单独的列),它会变得更加混乱(因为您必须做一些事情,例如调整范围更改月份时的日期值),但想法是一样的。只需创建您自己的 UIPickerView(或在互联网上搜索第三方解决方案)。