O valor do UIDate Picker alterado não atualiza a primeira rodada, mas cada rodada após .. iOS
Eu tenho um seletor de UIDate incorporado em um TableViewCell estático e, no momento, desabilitei a maior parte do código, exceto o código responsável pelo seletor de datas.
Estou usando o seletor de datas como um temporizador de contagem regressiva
Então isso é tudo, exceto algumas saídas e vars habituais:
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"
}
Na primeira vez que altero o valor do Picker, a função de alteração de valor não é acionada, mas as rotações ocorrem sem falha.
Eu tentei ligarviewDidLoad
compickerValueChanged(self)
e isso funciona, mas não resolve o problema. Também comentei todas as linhas de código nopickerValueChanged
função eviewDidLoad
mas ainda não deu o primeiro giro ..
Obrigado pelo seu tempo!
Atualização: Imagens adicionadas
Após a primeira rodada, pickerValueChanged não é chamado:
A partir da segunda rodada, o evento é chamado e o rótulo é atualizado:
Tentou:
Executando:datePicker.setDate(NSDate(), animated: true
noviewDidLoad()
resolve o problema de o evento não ser chamado na primeira rodada, mas isso define o estado inicial do seletor de datas para a hora atual. Como estou usando esse controle para definir uma duração para um evento, desejo que ele comece às 0 horas e 1 minuto. Isso pode ser feito comdatePicker.countDownDuration = 60
mas depois disso, o principal problema volta novamente. Portanto, uma solução pode ser definir o DatePicker com um NSDate de 1 minuto, mas como fazer isso?
Solução:
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)