如何在Swift中设置日期选择器的特定默认时间

21

有没有办法在加载时设置日期选择器显示特定时间?我使用来自GitHub的squimer / datePickerDialog子类从四个文本字段(开始时间,结束时间,开始日期和结束日期)中启动了四个日期选择器实例,用于弹出UIAlertView。

在我的应用程序中,默认的开始时间为上午7:00,默认的完成时间为下午5:00,并允许用户在这些时间周围进行调整。

我所看到的是你可以将datePicker.defaultDate设置为currentDate、minimumDate或maximumDate,且只能设置一次。是否可能在ViewController的调用中将defaultDate设置为硬编码字符串sTime =“07:00”和fTime =“17:00”?

非常感谢您的帮助。

编辑:以下是我从viewController调用子类的方式

@IBAction func setFT(sender: UITextField) {
    resignKeyboardCompletely(sender)
    DatePickerDialog().show("Pick a Finish Time", doneButtonTitle: "Done", cancelButtonTitle: "Cancel", datePickerMode: .Time) {
        (timeFinish) -> Void in
        self.dateFormatter.dateFormat = "HH:mm"
        let finTime = self.dateFormatter.stringFromDate(timeFinish)
        self.finishTime.text = finTime
    }
    defaults.setObject(finishTime.text, forKey: "finishTime")
    print(finishTime.text)
}
请注意,我在整个过程中还尝试通过NSUser Defaults保持持久性。

在一个子类中需要为四个视图控制器提供文本值吗? - user3118171
4个回答

47

如果您正在寻找通过字符串设置时间的方法,那么您可以使用类似下面的日期格式化程序。

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat =  "HH:mm"

let date = dateFormatter.dateFromString("17:00")

datePicker.date = date

Picker类中添加init方法

init(time:String) {
    super.init(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.size.width, UIScreen.mainScreen().bounds.size.height))

    setupView()
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat =  "HH:mm"

    if let date = dateFormatter.dateFromString("17:00") {
        datePicker.date = date
    }
}

这是我一直在尝试的东西,但我不太确定如何实现。这是我成功调用子类datePickerDialog.swift的方式。 - user3118171
@IBAction func setFT(sender: UITextField) { resignKeyboardCompletely(sender) DatePickerDialog().show("选择完成时间", doneButtonTitle: "完成", cancelButtonTitle: "取消", datePickerMode: .Time) { (timeFinish) -> Void in self.dateFormatter.dateFormat = "HH:mm" let finTime = self.dateFormatter.stringFromDate(timeFinish) self.finishTime.text = finTime } defaults.setObject(finishTime.text, forKey: "finishTime") print(finishTime.text) } - user3118171
如果您想让您的日期选择器从此时间开始,请将此代码放入viewDidLoad中...不过我不确定您在问什么。您应该尝试进一步解释您正在尝试做什么以及您已经尝试了什么并且失败了。 - Moriya
抱歉,对于这一切,包括 stack overflow 都非常陌生。 - user3118171
就像我之前所说的,“squimer/datePickerDialog.swift” 是从GitHub上继承而来的,它非常简约,我稍作了修改。 - user3118171
显示剩余3条评论

4

Swift 5

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
if let date = dateFormatter.date(from: "17:00") {
    print(date) // 2000-01-01 22:00:00 +0000
    datePicker.date = date
}

另外注意:如果你已经设置了 datePicker.minimumDate,并且正在使用此 dateFormat,那么日期/时间将默认为最早可能的日期--这会浪费你一个小时 :|


3

使用Swift 4或更高版本

let dateFormatter = DateFormatter()
dateFormatter.dateFormat =  "HH:mm"
let date = dateFormatter.date(from: "17:00")
datePicker.date = date

0

我来到这里是因为似乎设置开始日期没有起作用。结果发现在设置最小和最大日期之后需要设置初始日期。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接