初めに
Swiftのstoryboardで、DatePickerを使うために色々と調べたため、それをここに備忘録としてまとめておきます。
私自身ガチの初心者のため、間違いなどあるかもしれませんがご了承下さい。
また、Qiitaも初投稿なので、至らぬ点があれば教えていただけるとありがたいです。
完成品
環境
動作環境は以下になります。
MacOS | Xcode | Swift | Interface |
---|---|---|---|
12.3 | 14.1 | 5.7.1 | storyboard |
ViewControllerと紐付け
textFieldをMain.storyboardのViewController上に配置して、outletで接続しておきます。
コードで言う、@IBOutlet weak var dateTextField: UITextField!
の部分です。
コード
大元のコードは、https://qiita.com/ryomaDsakamoto/items/ab4ae031706a8133f193 を参考にさせていただきましたが、うまくいかなかった点などもあるため、一部、改変したりしています。
主な改変ポイントは、以下の通りです。
- アプリの一部として作ったので、一部グローバル変数にしている点。
- Xcodeの仕様変更で、
datePicker.preferredDatePickerStyle = .wheels
を指定しないとドラムロールにならなくなったようなので、そのように設定した点。 - DateFormatterで、曜日も表示されるようにした点。
- 日本語で月日が指定されるように、Localeを設定した点。
import UIKit
let YEAR_TO_DATE = Date()
let DATE_FORMATTER = DateFormatter()
var DATE = ""
class ViewController: UIViewController {
@IBOutlet weak var dateTextField: UITextField!
//UIDatePickerを定義するための変数
var datePicker: UIDatePicker = UIDatePicker()
override func viewDidLoad() {
super.viewDidLoad()
// DateFormatter を使用して書式とロケールを指定する
DATE_FORMATTER.locale = Locale(identifier: "ja_JP")//日本語にするため
DATE_FORMATTER.dateFormat = "y年MM月dd日(EEEE)"//これは表示する形を設定
DATE = DATE_FORMATTER.string(from: YEAR_TO_DATE)//最初に今日の日付を入れておく。
dateTextField.text = DATE//曜日も表示
// ピッカー設定
datePicker.datePickerMode = UIDatePicker.Mode.date
datePicker.timeZone = NSTimeZone.local
datePicker.locale = Locale(identifier: "ja_JP")//日本語にするため
datePicker.preferredDatePickerStyle = .wheels//ドラムロール
dateTextField.inputView = datePicker
// 決定バーの生成
let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 35))
let spacelItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)
let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(done))
toolbar.setItems([spacelItem, doneItem], animated: true)
// インプットビュー設定(紐づいているUITextfieldへ代入)
dateTextField.inputView = datePicker
dateTextField.inputAccessoryView = toolbar
}
// UIDatePickerのDoneを押したらTextFieldもそれに変わる。
@objc func done() {
dateTextField.endEditing(true)
//(from: datePicker.date))を指定してあげることで
//datePickerで指定した日付が表示される
DATE = DATE_FORMATTER.string(from: datePicker.date)
dateTextField.text = DATE
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
参考にした記事
以下の記事を参考にさせていただきました。(色々参考にしたので、漏れがあるかもしれません)
コードの主たる参考にした記事はこちらです。
現在日時を見るために参考にした記事はこちらです。
曜日を指定するために参考にしたサイトです。
今回は、「◯曜日」と出したいので、EEEEとしています。
以下は、日本語の曜日を指定するために参考にしたサイトです。
Qiita投稿にあたって参考にした記事