LoginSignup
0
0

More than 1 year has passed since last update.

【Swift 5】StoryboardでUIDatePickerからUITextfieldへの出力【曜日も表示】

Last updated at Posted at 2022-11-05

初めに

Swiftのstoryboardで、DatePickerを使うために色々と調べたため、それをここに備忘録としてまとめておきます。
私自身ガチの初心者のため、間違いなどあるかもしれませんがご了承下さい。
また、Qiitaも初投稿なので、至らぬ点があれば教えていただけるとありがたいです。

完成品

以下のような動きをさせます。
GIF貼り付けました。
DatePicker.gif

環境

動作環境は以下になります。

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を設定した点。
ViewController.swift
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投稿にあたって参考にした記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0