Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 317 - My Picker Project : DatePicker

Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide
質問 : Swiftで遊ぼう! - 252 - FaceViewプロジェクト始動 - Swiftで遊ぼう! on Hatena

Beginning iPhone Development with Swift: Exploring the iOS SDK

Beginning iPhone Development with Swift: Exploring the iOS SDK

Tab Bar コントローラーの用意はできたので、次はそれぞれのコンテンツビューコントローラーを作っていきます。

まず最初は、UIDatePickerクラスの実装です。

Pickerクラスで最も実装が簡単なのはUIDatePickerですが、扱いには注意が必要です。

いつものようにオブジェクト・ライブラリからDate Pickerをドラッグ&ドロップして画面の上の方に設置します。もう手順を説明しませんが*1、オブジェクトを設置するとコンストレイントを設定しなければなりません。同様にButtonも下に設置してコンストレイントを設定します。

f:id:yataiblue:20150520064533j:plain

DatePickerは表示を担当しているうえに、日付というデータを保持しています(まだ私は知りません。多分。どこかにデリゲートがあると思います)。ユーザーが日付のデータを用意する必要はないということです。これを表示させるために、「Ctrl + ドラッグ」してDatePickerViewControllerに@IBOutletを作ります。

@IBOutlet weak var datePicker: UIDatePicker!

次にボタンも同じように「Ctrl + ドラッグ」します。

@IBAction func buttonPressed(sender: AnyObject) {
}

これで用意ができました。

まず、日付のデータを取り込むステップですが、システムで用意されているNSDate()を使います。取り込むタイミングは、アプリが読み込まれるviewDidLoad()メソッドです。viewWillAppear()とかviewDidApplear()メソッドでも良さそうです。

override func viewDidLoad() {
 super.viewDidLoad()
 let date = NSDate()
 datePicker.setDate(date, animated: false)
}

これでdatePickerにデータが取り込まれました。

次はボタンを押したときに内容をアラートで表示するのでbuttonPressed()メソッドにコードを加えます。

@IBAction func buttonPressed(sender: AnyObject) {
 let date = datePicker.date
 let message = "The date and time you selected is \(date)"
 let alert = UIAlertController(title: "Date and TIme Selected",
               message: message,
               preferredStyle: .Alert)
 let action = UIAlertAction(title: "That's so true!",
             style: .Default,
             handler: nil)
 alert.addAction(action)
 presentViewController(alert, animated: true, completion: nil)
}

このアプリをラン(Cmd + R)させて、日付を選んでボタンを押します。

f:id:yataiblue:20150520064411j:plain

ちゃんと動いているように見えますが、日付をよくみるとズレています。UIDatePickerの実装は簡単なのですが、その取り扱いに注意の必要があるのはここです。国別に日付の表示フォーマット、時差など考慮する必要がるので何も考えず実装するとこういうことになるようです。日付の取り扱いはまた今後取り組むので今回はこれで終了。

*1:リクエストがあれば詳しく説明します。