我不知道是否有可能格式化UIDatePicker
?
我想有日期作为字符串之前工作日,如“星期一2018年1月1日”。我见过很多次,但我没有发现任何东西。
目前,仅显示日期,而不之前工作日。
我到处找也未找到答案。
如果你只显示日期,并希望看到星期,也可能需要实现自己的UIPickerView
。
例如,这将创建一个单组分选择器。而且,因为这取决于你住的地方后,2019年2月1日可能被解释为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第三方解决方案)。