【发布时间】:2022-11-15 11:08:46
【问题描述】:
我正在尝试将 iOS UIDatePicker 设置为具有空白默认日期而不是当前日期。这可能吗?
【问题讨论】:
-
UIDatePicker的模式和风格是什么? “空白”默认值会显示什么?你到底想达到什么目的? -
样式紧凑。它默认加载到当前日期,但我希望默认日期为空。用例是日期可以为空,因此如果用户不需要输入日期,则不应有默认值。
标签: ios swift xcode uidatepicker
我正在尝试将 iOS UIDatePicker 设置为具有空白默认日期而不是当前日期。这可能吗?
【问题讨论】:
UIDatePicker的模式和风格是什么? “空白”默认值会显示什么?你到底想达到什么目的?
标签: ios swift xcode uidatepicker
这是不可能的。初始日期有一个 date 属性。如果 nil 它默认为“现在”。如果您尝试使用类似 Date.distantPast 的名称,它实际上会将日期设置为 1 月 31 日。那是第 1 年。
我建议向 Apple 提交增强请求。
同时,您可以在标签旁边使用自己的按钮。让按钮显示 UIDatePicker,并将 preferredDateStype 设置为 .inline。通过正确的设置,您可以支持具有“可为空”的日期。我在我的一个应用程序中做了类似的事情。
【讨论】:
您可以像这样使用 pikerView:
声明您的月份数组(或您喜欢的),使您的控制器符合 UIPickerViewDelegate 和 UIPickerViewDataSource:
class Prova: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
let months: [String] = [" " ,"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] // months array
let pickerView = UIPickerView()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
pickerView.delegate = self
pickerView.dataSource = self
pickerView.translatesAutoresizingMaskIntoConstraints = false
//set constraints
view.addSubview(pickerView)
pickerView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
pickerView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
pickerView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
pickerView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return months.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return months[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
// do whatever you want when specific row is selected
}
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let rowTitle = months[row]
let pickerLabel = UILabel()
pickerLabel.textColor = .black
pickerLabel.text = rowTitle
pickerLabel.font = .systemFont(ofSize: 16)
pickerLabel.textAlignment = .center
return pickerLabel
}
}
这是结果:
【讨论】: