我想知道是否可以格式化UIDatePicker
吗?
我希望日期前的工作日为字符串,例如“ Monday 01.01.2018”。我已经看过很多次了,但是什么也没发现。
当前仅显示日期,而不显示星期几。
我到处搜索,但没有找到答案。
答案 0 :(得分:2)
如果您只显示日期并且也想查看星期几,则可能必须实施自己的UIPickerView
。
例如,这将创建一个单组件选择器。而且,由于视您的住所而定,2019年1月2日可能被解释为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
(或在Interwebs中搜索第三方解决方案)即可。