ios - 故事板日期选择器中的选择性日期(iOS 开发)
问题描述
是否可以将 DatePicker 限制为 iOS 故事板中给定范围内的选择性日期?我试图让 DatePicker 只在星期六显示。
解决方案
您不能在 Storyboard 中执行此操作,也不能使用UIDatePicker
...
但是,使用UIPickerView
.
- 获取“本周六”的日期
- 对于每一行,返回 thisSaturday plus (7 x row)
这是一个简单的例子:
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
let picker = UIPickerView()
let dateFormatter = DateFormatter()
var thisSaturday: Date!
override func viewDidLoad() {
super.viewDidLoad()
// set your desired date format
dateFormatter.dateStyle = .medium
picker.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(picker)
let g = view.safeAreaLayoutGuide
NSLayoutConstraint.activate([
// center picker view with default width and height
picker.centerXAnchor.constraint(equalTo: g.centerXAnchor),
picker.centerYAnchor.constraint(equalTo: g.centerYAnchor),
])
picker.dataSource = self
picker.delegate = self
// get the date for the "upcoming Saturday"
let today = Date()
let daysToAdd = 7 - (Calendar.current.dateComponents([.weekday], from: today).weekday ?? 0 )
guard let d = Calendar.current.date(byAdding: .day, value: daysToAdd, to: today) else {
fatalError("Could not get a valid date!!! (This should never happen...)")
}
thisSaturday = d
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
// how many weeks in the future do you want to allow?
// for example, 52-weeks x 4-years
return 52 * 4
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
// each row will be
// "upcoming Saturday" plus
// 7-days x row number
guard let d = Calendar.current.date(byAdding: .day, value: 7 * row, to: thisSaturday) else {
fatalError("Could not get a valid date!!! (This should never happen...)")
}
return dateFormatter.string(from: d)
}
}
推荐阅读
- swift - 如何创建符合 ObservableObject 的数组?
- google-chrome - “噢,Snap!显示此网页时出现问题。”
- python - 使用 Python 将事件发送到 Azure 事件中心
- c++ - 如何在 Octave 编码中访问 C++ 库
- java - 将 PostgreSQLIntervalType 与本机 SQL 一起使用时,Hibernate Types 框架抛出“PSQLException: ERROR: cannot cast type bigint to interval”
- .net-core - 如何添加用户以使用 Novell 库进行交换
- python-3.x - 如何 min_max 规范化数据
- react-native - 如何在 iOS 中安装 React Native Expo 应用程序?
- jquery - 我必须单击 Jquery 提交按钮两次
- android-studio - Gradle 在 Windows 上找不到 git.exe