iOS UIDatePicker 总是 returns 今天的日期
iOS UIDatePicker always returns today's date
Stack Overflow上也有类似的问题,不过和我的问题不一样,所以我随意打开这个。
我有 iOS 视图控制器,在故事板中定义了一个 UIDatePicker。
我已经在视图控制器代码中定义(连接)IBOutlet,如下所示:
@IBOutlet weak var endTimeDatePicker: UIDatePicker!
有一次我这样设置初始日期:
endTimeDatePicker.date = state!.endTime;
或者像这样:
endTimeDatePicker.setDate(state!.endTime, animated: true);
它显示正确的日期表明日期选择器已正确连接。
但是,如果我选择另一个日期并尝试使用 endTimeDatePicker.date 选择日期,它总是 returns 相同 - 今天的日期,无论我选择什么。
日期选择器的故事板属性是:
模式 - 日期和时间
间隔 - 1 分钟
Date - 当前日期(但与自定义相同,每次只返回定义的自定义日期)
我有什么事情没做吗?
我不确定有两个不同的 datePickers(比如在潜在的重复 Stack Overflow 问题中)
编辑:看起来它只发生在日期选择器从代码设置初始值时。
编辑:设置日期选择器的代码:
private func reloadData (state : State?)
{
if (state != nil)
{
endTimeDatePicker.setDate(state!.endTime, animated: true);
backgroundImage.image = UIImage(named: state!.type.imageName)!;
}
else
{
let endDate = NSDate(timeIntervalSinceNow: 1800);
endTimeDatePicker.setDate(endDate, animated: true);
backgroundImage.image = UIImage(named: StateType.Active.imageName);
}
}
尝试读取所选日期的代码:
@IBAction func doneTapped(sender: AnyObject) {
let row: Int = self.stateTypePicker.selectedRowInComponent(0);
state = State (id: -1, type: stateTypes[row], startTime: NSDate(), endTime: self.endTimeDatePicker.date);
service.addState(state!) {
(responseDict) in
}
}
func reloadData 在http 请求的回调中被调用。可能是线程锁问题?
您的问题与 NSURLSession
的回调方法 reloadData
有关。在这里,您正在后台线程中更新 UIDatePicker
,但所有 UI 更新都必须在主线程中完成。
这就是您在阅读 UIDatePicker
的 date
属性 时看到今天日期的原因。
Stack Overflow上也有类似的问题,不过和我的问题不一样,所以我随意打开这个。
我有 iOS 视图控制器,在故事板中定义了一个 UIDatePicker。 我已经在视图控制器代码中定义(连接)IBOutlet,如下所示:
@IBOutlet weak var endTimeDatePicker: UIDatePicker!
有一次我这样设置初始日期:
endTimeDatePicker.date = state!.endTime;
或者像这样:
endTimeDatePicker.setDate(state!.endTime, animated: true);
它显示正确的日期表明日期选择器已正确连接。
但是,如果我选择另一个日期并尝试使用 endTimeDatePicker.date 选择日期,它总是 returns 相同 - 今天的日期,无论我选择什么。
日期选择器的故事板属性是: 模式 - 日期和时间 间隔 - 1 分钟 Date - 当前日期(但与自定义相同,每次只返回定义的自定义日期)
我有什么事情没做吗?
我不确定有两个不同的 datePickers(比如在潜在的重复 Stack Overflow 问题中)
编辑:看起来它只发生在日期选择器从代码设置初始值时。
编辑:设置日期选择器的代码:
private func reloadData (state : State?)
{
if (state != nil)
{
endTimeDatePicker.setDate(state!.endTime, animated: true);
backgroundImage.image = UIImage(named: state!.type.imageName)!;
}
else
{
let endDate = NSDate(timeIntervalSinceNow: 1800);
endTimeDatePicker.setDate(endDate, animated: true);
backgroundImage.image = UIImage(named: StateType.Active.imageName);
}
}
尝试读取所选日期的代码:
@IBAction func doneTapped(sender: AnyObject) {
let row: Int = self.stateTypePicker.selectedRowInComponent(0);
state = State (id: -1, type: stateTypes[row], startTime: NSDate(), endTime: self.endTimeDatePicker.date);
service.addState(state!) {
(responseDict) in
}
}
func reloadData 在http 请求的回调中被调用。可能是线程锁问题?
您的问题与 NSURLSession
的回调方法 reloadData
有关。在这里,您正在后台线程中更新 UIDatePicker
,但所有 UI 更新都必须在主线程中完成。
这就是您在阅读 UIDatePicker
的 date
属性 时看到今天日期的原因。