
我有一个弹出式视图控制器,就像上面的图片。在viewDidLoad中,我将选择器视图的最小日期设置为现在( Date() ),在情节提要中,我将间隔时间设置为15分钟。下面是我使用的代码
class DateTimePickerVC: UIViewController {
@IBOutlet var dateTimePickerView: UIDatePicker!
var selectedDateAndTime : Date?
override func viewDidLoad() {
super.viewDidLoad()
// to make live update of selected date
dateTimePickerView.addTarget(self, action: #selector(DateTimePickerVC.datePickerValueChanged), for: UIControl.Event.valueChanged)
// minimum date is now
dateTimePickerView.minimumDate = Date()
// set initial value, to avoid nil value
selectedDateAndTime = dateTimePickerView.date
}
@objc func datePickerValueChanged (datePicker: UIDatePicker) {
selectedDateAndTime = datePicker.date
}
@IBAction func pickedButtonDidPressed(_ sender: Any) {
// send date 'selectedDateAndTime' to other VC
}
}我这里有两个问题:
selectedDateAndTime的零值,我在viewDidLoad中设置了selectedDateAndTime = dateTimePickerView.date,因此我希望当用户立即点击“保存”按钮并将date发送到其他VC而不滚动数据选择器时,它将获得datePicker中显示的最小日期。假设用户在16:08打开弹出的日期,我希望选定的日期是在datePickerView (今天16:15)显示的最小日期和时间,但是我得到的实际日期值是(今天16:08),因为我设置了datePicker.minimumDate = Date() (now)。如何获得datePicker视图上显示的最小日期?发布于 2018-10-18 11:21:34
enum DateRoundingType {
case round
case ceil
case floor
}
extension Date {
func rounded(minutes: TimeInterval, rounding: DateRoundingType = .round) -> Date {
return rounded(seconds: minutes * 60, rounding: rounding)
}
func rounded(seconds: TimeInterval, rounding: DateRoundingType = .round) -> Date {
var roundedInterval: TimeInterval = 0
switch rounding {
case .round:
roundedInterval = (timeIntervalSinceReferenceDate / seconds).rounded() * seconds
case .ceil:
roundedInterval = ceil(timeIntervalSinceReferenceDate / seconds) * seconds
case .floor:
roundedInterval = floor(timeIntervalSinceReferenceDate / seconds) * seconds
}
return Date(timeIntervalSinceReferenceDate: roundedInterval)
}
}用法:
//add below code in viewDidLoad()
let nextMinuteIntervalDate = Date().rounded(
minutes: 15,
rounding: .ceil
)
dateTimePickerView.minimumDate = nextMinuteIntervalDate
dateTimePickerView.setDate(nextMinuteIntervalDate, animated: true)发布于 2018-10-18 10:07:44
minimumDate的声明:变量minimumDate:日期?{ get set }
由于minimumDate具有get属性,所以可以使用以下方法获取最小日期:
// Since it is an optional , we have to safe unwrap it
if let minimumDate = datePicker.minimumDate {
// Use your minimumDate variable here
} https://stackoverflow.com/questions/52871312
复制相似问题