我在静态 TableViewCell 中嵌入了一个 UIDate 选择器,目前我禁用了大部分代码,除了负责日期选择器的代码。
我将日期选择器用作倒数计时器
所以这就是全部,除了一些常用的 outlets 和 vars:
override func viewDidLoad() {
super.viewDidLoad()
// tfName.delegate = self
// tfDescription.delegate = self
//
datePicker.countDownDuration = 60
// pickerValueChanged(self)
}
@IBAction func pickerValueChanged(sender: AnyObject) {
seconds = Int(datePicker.countDownDuration)
hours = seconds / 3600
if hours == 0{
minutes = seconds / 60
} else{
minutes = seconds % 3600 / 60
}
labelDuration.text = "\(hours) hours \(minutes) minutes"
}
我第一次更改 Picker 的值时,值更改函数根本没有触发,但在它发生后的旋转没有失败。
我尝试在 viewDidLoad
中调用它,使用 pickerValueChanged(self)
并且有效,但没有解决问题。我还注释掉了 pickerValueChanged
函数和 viewDidLoad
中的每一行代码,但它仍然没有触发第一次旋转..
感谢您的宝贵时间!
更新:添加图片
第一次旋转后,pickerValueChanged 不会被调用:
从第二次旋转开始,事件被调用并且标签被更新:
尝试过:
执行:
datePicker.setDate(NSDate(), animated: true
在 viewDidLoad()
解决了事件在第一次旋转时没有被调用的问题,但这会将日期选择器的初始状态设置为当前时间。因为我使用这个控件来设置一个事件的持续时间,所以我想让它从 0 小时 1 分钟开始。
这可以通过 datePicker.countDownDuration = 60
来完成,但在此之后,主要问题又回来了。
因此,一个解决方案可能是将 DatePicker 的 NSDate 设置为 1 分钟,但该怎么做呢?
解决方案:
var dateComp : NSDateComponents = NSDateComponents()
dateComp.hour = 0
dateComp.minute = 1
dateComp.timeZone = NSTimeZone.systemTimeZone()
var calendar : NSCalendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)!
var date : NSDate = calendar.dateFromComponents(dateComp)!
datePicker.setDate(date, animated: true)
最佳答案
我提出了以下解决方案,将 datePicker 组件(在倒数计时器模式下)初始化为 0 小时 1 分钟,它在第一次旋转时直接响应。因为这似乎是一个错误,如果您希望文本标签在 datePicker 更改时更新其值并且一开始没有更新,这将非常令人沮丧:
var dateComp : NSDateComponents = NSDateComponents()
dateComp.hour = 0
dateComp.minute = 1
dateComp.timeZone = NSTimeZone.systemTimeZone()
var calendar : NSCalendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)!
var date : NSDate = calendar.dateFromComponents(dateComp)!
datePicker.setDate(date, animated: true)
对于我的实现来说,timeZone 组件并不是真正需要的。
关于ios - UIDatePicker valuechanged 不更新第一次旋转,但每次旋转后.. iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28295013/