如何获取datePicker的初始值Swift
How to get initial value of datePicker Swift
我想获取timePicker的初始值,当我滚动时间时值会发生变化。请看照片会更清楚明白我要的是什么
@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
方法中的标签即可。我会将日期格式化程序声明移出该方法,以避免每次值更改时都创建一个新的。请注意,您应该使用 timeStyle
或 dateFormat
,但不能同时使用两者。在向最终用户显示日期时,您应该始终尊重设备的区域设置和设置,因此在这种情况下您应该选择 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
来更新一些视图元素。
我想获取timePicker的初始值,当我滚动时间时值会发生变化。请看照片会更清楚明白我要的是什么
@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
方法中的标签即可。我会将日期格式化程序声明移出该方法,以避免每次值更改时都创建一个新的。请注意,您应该使用 timeStyle
或 dateFormat
,但不能同时使用两者。在向最终用户显示日期时,您应该始终尊重设备的区域设置和设置,因此在这种情况下您应该选择 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
来更新一些视图元素。