Если вы показываете только дату и хотите видеть день недели, возможно, вам придется внедрить свой собственный UIPickerView
.
Например, это создает однокомпонентный сборщик.И, поскольку в зависимости от того, где вы живете, 01.02.2019 можно интерпретировать как 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))
}
}
Это дает (для пользователя в США):
![enter image description here](https://i.stack.imgur.com/krA6Z.png)
Теперь, если вы хотите иметь как пользовательский формат строки даты, так и несколько компонентов (например, день,Месяц и год в виде отдельных столбцов), становится все более запутанным (потому что вы должны делать такие вещи, как корректировка диапазона значений дня при смене месяца), но идея будет такой же.Просто создайте свой собственный UIPickerView
(или поищите во внешних сетях сторонние решения).