質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

2400閲覧

UIDatePickerからUITextfieldへ出力したい

Risney

総合スコア148

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/08/11 23:53

編集2020/08/12 09:07

前提・実現したいこと

・UIDatePickerからUITextfieldへ出力したい

発生している問題・エラーメッセージ

ピッカー選択後、「Done」ボタンを押下しても、
テキストフィールドに反映されません。

また、特にエラーメッセージはありません。

該当のソースコード

ViewController

1import UIKit 2 3class ViewController: UIViewController { 4 5 @IBOutlet weak var dateField: UITextField! 6 7 var datePicker: UIDatePicker = UIDatePicker() 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 dateField.text = "DatePicker" 13 // ピッカー設定 14 datePicker.datePickerMode = UIDatePicker.Mode.date 15 datePicker.timeZone = NSTimeZone.local 16 datePicker.locale = Locale.current 17 dateField.inputView = datePicker 18 19 // 決定バーの生成 20 let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 35)) 21 let spacelItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) 22 let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(done)) 23 toolbar.setItems([spacelItem, doneItem], animated: true) 24 25 // インプットビュー設定 26 dateField.inputView = datePicker 27 dateField.inputAccessoryView = toolbar 28 29 // デフォルト日付 30 let formatter = DateFormatter() 31 formatter.dateFormat = "yyyy-MM-dd" 32 datePicker.date = formatter.date(from: "2020-8-12")! 33 } 34 35 // 決定ボタン押下 36 @objc func done() { 37 dateField.resignFirstResponder() 38 39 // 日付のフォーマット 40 let formatter = DateFormatter() 41 formatter.dateFormat = "yyyy-MM-dd" 42 dateField.text = "(formatter.string(from: Date()))" 43 } 44 45 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 46 dateField.resignFirstResponder() 47 } 48} 49

CustomTextField

1 2import UIKit 3 4final class CustomTextField: UITextField { 5 6 /* 入力キャレット非表示 */ 7 override func caretRect(for position: UITextPosition) -> CGRect { 8 return .zero 9 } 10 /* 範囲選択カーソル非表示 */ 11 override func selectionRects(for range: UITextRange) -> [UITextSelectionRect] { 12 return [] 13 } 14 /* コピー・ペースト・選択等のメニュー非表示 */ 15 override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { 16 return false 17 } 18}

補足情報(FW/ツールのバージョンなど)

以下のサイトを参考に作成しています。
【swift】UIDatePickerを作ってみる(日付選択ドラムロール)
swift4 UIDatePickerからUITextfieldへ出力まで

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Risney

2020/08/12 00:40

同様に試してみたいとおもいます!
Risney

2020/08/12 09:08

試してみたのですが、 テキストフィールドにピッカーの内容が反映されないです。 そこ以外の挙動はおかげ様で問題なさそうです。
_Kentarou

2020/08/12 09:13

まず、func done()は呼ばれていますでしょうか?
Risney

2020/08/13 10:07

print ("done")を入れてみたところ、 コンソールに出力されたので呼ばれてはいるみたいです!
guest

回答2

0

Dont押下時のメソッドないを修正したら解消しました。

選択したピッカーの値をテキストフィールドに入れてなかったので反映されなかったようです。
Kentarou様ありがとうございました!

修正前

swift

1 dateField.text = "(formatter.string(from: Date()))"

修正後

swift

1dateField.text = "(formatter.string(from: datePicker.date))"

投稿2020/08/14 02:54

編集2020/08/14 03:40
Risney

総合スコア148

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

提示されているコードをコピペして実行してみました。

書いてあるとおりに動いていますね...

決定ボタン押下の処理の中で毎回現在時刻をフォーマットして文字列として設定しているので、ピッカーの値は何一つ使われていません。

swift

1dateField.text = "(formatter.string(from: Date()))"

投稿2020/08/13 10:26

_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Risney

2020/08/14 02:50

Date()がおかしかったのですね! 「Date()」から「datePicker.date」に変更したらピッカーに反映されました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問