如何获取datePicker的初始值Swift

How to get initial value of datePicker Swift

我想获取timePicker的初始值,当我滚动时间时值会发生变化。请看照片会更清楚明白我要的是什么

https://imgur.com/a/3Hg69uR

@IBAction func datePickerChanged(_ sender: Any) {
    let dateFormatter = DateFormatter()
    dateFormatter.timeStyle = .short
    dateFormatter.dateFormat = "HH:mm"
    let strDate = dateFormatter.string(from: datePicker.date)
    datePickerLb.text = strDate
}

您只需更新 viewDidLoad 方法中的标签即可。我会将日期格式化程序声明移出该方法,以避免每次值更改时都创建一个新的。请注意,您应该使用 timeStyledateFormat,但不能同时使用两者。在向最终用户显示日期时,您应该始终尊重设备的区域设置和设置,因此在这种情况下您应该选择 timeStyle


let dateFormatter: DateFormatter = {
    let dateFormatter = DateFormatter()
    dateFormatter.timeStyle = .short
    return dateFormatter
}()

override func viewDidLoad() {
    super.viewDidLoad()
    // your code

    // you can update the label here
    // datePickerLb.text = dateFormatter.string(from: datePicker.date)
    // or manually send the valueChanged action to force the update at view did load
    datePicker.sendActions(for: .valueChanged)
}

@IBAction func datePickerChanged(_ datePicker: UIDatePicker) {
    datePickerLb.text = dateFormatter.string(from: datePicker.date)
}

@Leo的回答很实用。要补充的一件事是,如果您希望在选择器滚动时更新日期,那么不幸的是,UIDatePicker 本身是不可能的。这是因为 UIDatePicker 不是 UIPickerView 的子类,它在内部管理一个 UIPickerView。这里的解决方案可能是使用自定义 UIPickerView。然后对于那个 UIPickerView 你可以像这样实现它的委托方法:

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> 字符串? {

switch component {
case 0:
    currentTime.hours = pickerView.selectedRow(inComponent: 0)
    return "\(row) Hour"
case 1:
    currentTime.minutes = pickerView.selectedRow(inComponent: 1)
    return "\(row) Minute"
case 2:
    currentTime.seconds = pickerView.selectedRow(inComponent: 2)
    return "\(row) Second"
default:
    return ""

}

}

例如,

currentTime var 应该有一个 didSet 来更新一些视图元素。