用swift写一个年、月、日、时、分各自一列的选择器
时间: 2023-09-25 07:09:18 浏览: 55
以下是用 Swift 实现的年、月、日、时、分各自一列的选择器的代码:
```swift
import UIKit
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
let years = Array(1900...2021)
let months = Array(1...12)
var days = Array(1...31)
let hours = Array(0...23)
let minutes = Array(0...59)
@IBOutlet weak var pickerView: UIPickerView!
override func viewDidLoad() {
super.viewDidLoad()
pickerView.delegate = self
pickerView.dataSource = self
}
// MARK: - UIPickerViewDataSource
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 5
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
switch component {
case 0:
return years.count
case 1:
return months.count
case 2:
return days.count
case 3:
return hours.count
case 4:
return minutes.count
default:
return 0
}
}
// MARK: - UIPickerViewDelegate
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
switch component {
case 0:
return String(years[row])
case 1:
return String(months[row])
case 2:
return String(days[row])
case 3:
return String(hours[row])
case 4:
return String(minutes[row])
default:
return ""
}
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
switch component {
case 1:
let month = months[row]
let leapYear = (years[pickerView.selectedRow(inComponent: 0)] % 4 == 0 && (years[pickerView.selectedRow(inComponent: 0)] % 100 != 0 || years[pickerView.selectedRow(inComponent: 0)] % 400 == 0))
switch month {
case 2:
if leapYear {
days = Array(1...29)
} else {
days = Array(1...28)
}
case 4, 6, 9, 11:
days = Array(1...30)
default:
days = Array(1...31)
}
pickerView.reloadComponent(2)
default:
break
}
}
}
```
在此代码中,我们定义了五个数组来存储可选的年、月、日、时、分数据。在 `viewDidLoad` 方法中,我们设置了 UIPickerView 的 delegate 和 dataSource 属性,并在 `numberOfComponents` 方法中返回了 5,表示我们的选择器将有五列。
在 `numberOfRowsInComponent` 方法中,我们返回每个组件中的行数,这取决于对应的数组的长度。
在 `titleForRow` 方法中,我们返回每个组件中每个行的标题。
在 `didSelectRow` 方法中,我们根据所选月份的不同重新加载第三列,即日的列。例如,如果所选月份是 2 月,则我们需要根据所选年份计算是否为闰年,并相应地更新日的列。
注意:此代码未包含年份闰年的判断。如果需要考虑闰年,则需要在 `didSelectRow` 方法中检查所选年份是否为闰年,并相应地更新日的列。