2011-07-18 8 views
0

私のiPhoneアプリケーションでUIDatePickerを使用しています。私は、datepickerのモードをUIDatePickerModeTimeとUIDatePickerModeDateの間で切り替えるボタンをクリックしています。 モードがUIDatePickerModeDateのときにdatepickerの日付を変更すると、モードを切り替えると変更日が正しく表示されますが、時刻を変更してモードを切り替えると、UIDatePickerModeTimeにモードを再び切り替えて時刻が午前12時にリセットされます私はなぜこれが起きているのか、それをどうするのか分かりません。助けてください。UIDatePicker UIDatePickerのモードをUIDatePickerModeTimeに変更すると、時刻がリセットされますか?

答えて

0

日付ピッカーを提示するときに日付ピッカーから日付を格納したプロパティとして宣言したDateオブジェクトを使用しました。 日付ピッカーの日付を変更したときに保存された日付を更新しました(UIControl通知の使用) 日付ピッカーのモードを変更すると、日付ピッカーに同じ日付が割り当てられました。

は、私は、これはかなり単純だったが、かつて私は、私は同様の問題を持っている財産は私

1

ために仕事をしたことをwork.Makingなかった、単純なDateオブジェクトを取ることによって、同じことをしようとしていた理解しています。私がUIDatePickerModeDateからUIDatePickerModeTimeに初めて変更した時は、OKでした。しかし、私が..Dateモードに戻り、再び..Timeモードに戻ると、時刻は00:00となります。その後、モード変更の回数に関係なく、時刻は常に00:00のままです。私は私のUIDatePickerをプログラムで、AppleのUICatalogアプリケーションのUIDatePickerと同じようにモデル化しました。この動作はアプリケーションには存在しません。

私は、UIControl通知でピッカーを取得してリセットするという目的で、保持された@プロパティでピッカーからNSDate値を保存しました。しかし、ピッカーがDateモードからTimeモードに変更されたときに発生したイベントは見つかりませんでした。私が述べたように、私はモードを変更したときに、ではない私は、ピッカーの日付(または時間)を変更した場合にイベントが発生もちろん

 [myDatePicker addTarget:self action:@selector(getDateTime:) forControlEvents:UIControlEventAllEvents]; 

しかし:私ものようなものを試してみました。

最終的に私はモードを切り替えたところで同じイベントメソッドをターゲットにしたUISegmentedControl(UICatalogアプリケーションと同じ)を使用してしまいました。ただし、ピッカーを保存されたNSDate値にリセットすると、Timeは00:00にとどまりました。私はNSLogを使用して、保存された値がOKであることを確認し、Time値の部分も00:00に変更されたことを確認しました。私は新しいNSDate値を保存していないので、これは本当に奇妙でした。元の保存された値は単にそれ自身で変更されました!

私はまだこの問題を調査しており、特にUIDatePickerがサポートされているNIBなしでプログラムで追加されている場合には、これをバグと呼びます。

更新: 私の最終的な解決策は、あなたとほとんど同じでした。何らかの理由で、保存された日付がNSDate値として保存されたときにエラーが続きました。 NSStringのようにそれを保存し、両方の方法を型キャストすることはトリックをした:

また
self.saveDate = (NSString*)self.myDatePicker.date; 

... 

[self.myDatePicker setDate:(NSDate*)self.saveDate animated:NO]; 

、私はGCDのdispatch_asyncブロックを介して外部機器に日付を取得し、保存していますから、性質、自己を。表記法も必要でした(main_que上でさえ)。

最終的な結論:

は、私は今UIDatePicker日付ピッカーがアクセスされ、毎回の設定が必要な要件ではなく、バグであることを確信しています。アップルのUICatalogアプリケーションを使用して、日付を今日に一度だけ設定し、日付と時刻のモードを切り替えると、そのアプリは全く同じ動作を示します。日付は保持されますが、時刻は00:00にリセットされます。日付または時刻以外のモードに切り替えてスイッチバックすると、すべてのモードがフロア値にリセットされます。

関連する問題