如何在仅 select 年的 swiftUI 中创建一个 DatePicker,并且我希望它在预先指定的年份范围内?
How do I create a DatePicker in swiftUI that only select years and I want this to be in prespecified range of years?
我正在尝试构建一个应用程序,用户请求一个有很多代的项目,他必须输入他想要哪一年?
- 日期选择器被包裹在表单中,所以当它被点击时,它不会像许多选择器那样运行,而是导航到选择器屏幕,而是在列表中创建日期选择器视图,有没有办法导航到它或至少将它的大小调整到较小的尺寸
您可以创建自定义年份选择器,方法是使用一个简单的 Picker
并向其传递一个 Int
数组作为您的年份。
struct YearPicker: View {
private let numberFormatter: NumberFormatter = {
let nf = NumberFormatter()
nf.usesGroupingSeparator = false
return nf
}()
@State private var selectedYearIndex: Int
private let years: [Int]
init(start: Int, end: Int) {
let years = Array(start...end)
self._selectedYearIndex = State(initialValue: years.startIndex)
self.years = years
}
func yearString(at index: Int) -> String {
let selectedYear = years[index]
return numberFormatter.string(for: selectedYear) ?? selectedYear.description
}
var body: some View {
VStack {
Text("Your birth year is \(yearString(at: selectedYearIndex))")
Picker("Year", selection: $selectedYearIndex) {
ForEach(years.indices) { yearIndex in
Text("\(self.yearString(at: yearIndex))")
}
}
}
}
}
struct YearPicker_Previews: PreviewProvider {
static var previews: some View {
YearPicker(start: 2000, end: 2020)
}
}
我正在尝试构建一个应用程序,用户请求一个有很多代的项目,他必须输入他想要哪一年?
- 日期选择器被包裹在表单中,所以当它被点击时,它不会像许多选择器那样运行,而是导航到选择器屏幕,而是在列表中创建日期选择器视图,有没有办法导航到它或至少将它的大小调整到较小的尺寸
您可以创建自定义年份选择器,方法是使用一个简单的 Picker
并向其传递一个 Int
数组作为您的年份。
struct YearPicker: View {
private let numberFormatter: NumberFormatter = {
let nf = NumberFormatter()
nf.usesGroupingSeparator = false
return nf
}()
@State private var selectedYearIndex: Int
private let years: [Int]
init(start: Int, end: Int) {
let years = Array(start...end)
self._selectedYearIndex = State(initialValue: years.startIndex)
self.years = years
}
func yearString(at index: Int) -> String {
let selectedYear = years[index]
return numberFormatter.string(for: selectedYear) ?? selectedYear.description
}
var body: some View {
VStack {
Text("Your birth year is \(yearString(at: selectedYearIndex))")
Picker("Year", selection: $selectedYearIndex) {
ForEach(years.indices) { yearIndex in
Text("\(self.yearString(at: yearIndex))")
}
}
}
}
}
struct YearPicker_Previews: PreviewProvider {
static var previews: some View {
YearPicker(start: 2000, end: 2020)
}
}