是否可以格式化 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
(或在互联网上搜索第三方解决方案)。
请问是否可以格式化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
(或在互联网上搜索第三方解决方案)。