2009-07-10 3 views
7

Ich habe eine UIPickerView mit mehreren Komponenten. Einige Werte sind ausgegraut und mein pickerView:didSelectRow:inComponent berücksichtigt dies, indem die fragliche Auswahlkomponente auf den nächsten gültigen Wert verschoben wird, ähnlich wie UIDatePicker von "30" zu "28" wechselt, wenn Sie "Februar" auswählen. Dann ruft es eine Delegate-Methode auf, um den angepassten Wert anzukündigen.UIPickerView selectedRowInComponent: gibt veraltete Daten zurück, nachdem der Code angepasst wurde

Wenn meine Einstellvorrichtung Methode ruft meine UIPickerView ‚s selectRow:inComponent:animated:YES, wird der Wert auf dem Bildschirm korrekt ist, aber die Werte von selectedRowInComponent: abgestanden sind (von vor der Einstellung für die Grauwerte). Wenn ich jedoch selectRow:inComponent:animated:NO aufrufen, sind die zurückgegebenen Werte korrekt, aber der Mangel an Animation ist störend.

Ich habe versucht, die Einstellung in einem beginAnimations:/commitAnimations Block Einwickeln und die Werte in UIView ‚s +animationDidStopSelector fangen, aber ich habe noch abgestanden Werte erhalten. Ist schon mal jemand darauf gestoßen?

Das Problem ist einfach zu duplizieren.

Wenn Sie JA haben, um es zu animieren, dann ist retValue 0 im Kopf (Sie nennen es abgestanden). Der Wechsel zu NO, retValue ist identisch mit newValue.

Antwort

1

Ich habe das nicht bemerkt, aber ein einfacher Hack könnte sein, die Operation animiert auszuführen, dann, sobald die Animation beendet ist, führe sie einfach wieder ohne die Animation aus. Dann sollten die Ergebnisse von selectedRowInComponent korrekt sein.

Es scheint jedoch von Ihrem Testcode, dass es die richtigen Ergebnisse zurückgibt. Wenn Sie den Picker bitten, die animierte Zeile auszuwählen, wird der neue Wert erst dann gesetzt, wenn die Animation abgeschlossen ist. Wenn Sie also sofort nach dem Start der Animation nach der ausgewählten Zeile fragen (die sowieso erst beim nächsten Runloop startet)), dann wirst du das alte Ergebnis bekommen.

Wie genau fangen Sie das Ende der Animation trotzdem an, könnten Sie den verwendeten Code anzeigen?

Und eine andere Frage ist, warum brauchen Sie das sofort zu korrigieren? Wenn Sie den Picker explizit einstellen, dann wissen Sie bereits genau, welcher Wert gesetzt wird. Warum müssen Sie ihn dann erneut fragen?