画像のように年月日と時間をPickerViewで入力できるようなオブジェクトを設置したいと考えています。
このホームページを参考にしてキーボード入力時にデートピッカーが表示するオブジェクトを設置しました。
https://qiita.com/Takarkiz/items/5b559a63598e3d641c3a
さらに以下のホームページを参考にして、tagをつけて同じビュー内に違う値を持つPickerViewを設置しようとしたところ、出来ませんでした。
https://teratail.com/questions/59982
教えていただきたいこと
①同じビュー内に違う値を持つPickerViewを2つ表示する方法
swift
1import UIKit 2class testViewController: UIViewController, UITextFieldDelegate{ 3 4var toolBar:UIToolbar! 5 6 7 @IBOutlet weak var wakeTimeTextField: UITextField! 8 9 @IBOutlet weak var textfield2: UITextField! 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 wakeTimeTextField.tag = 1 14 wakeTimeTextField.delegate = self 15 setupToolbar() 16 17 textfield2.tag = 2 18 textfield2.delegate = self 19} 20func setupToolbar() { 21 //datepicker上のtoolbarのdoneボタン 22 toolBar = UIToolbar() 23 toolBar.sizeToFit() 24 let toolBarBtn = UIBarButtonItem(title: "DONE", style: .plain, target: self, action: #selector(doneBtn)) 25 toolBar.items = [toolBarBtn] 26 wakeTimeTextField.inputAccessoryView = toolBar 27} 28 29func textFieldDidBeginEditing(_ textField: UITextField) { 30 if wakeTimeTextField.tag == 1{ 31 let datePickerView:UIDatePicker = UIDatePicker() 32 datePickerView.datePickerMode = UIDatePicker.Mode.date 33 textField.inputView = datePickerView 34 datePickerView.addTarget(self, action: #selector(datePickerValueChanged(sender:)), for: UIControl.Event.valueChanged)}else{ 35 let datePickerView:UIDatePicker = UIDatePicker() 36 datePickerView.datePickerMode = UIDatePicker.Mode.time 37 textField.inputView = datePickerView 38 datePickerView.addTarget(self, action: #selector(datePickerValueChanged(sender:)), for: UIControl.Event.valueChanged)} 39} 40 41 //datepickerが選択されたらtextfieldに表示 42@objc func datePickerValueChanged(sender:UIDatePicker) { 43 if wakeTimeTextField.tag == 1{ 44 let dateFormatter = DateFormatter() 45 dateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "yMMMdE", options: 0, locale: Locale(identifier: "ja_JP")) 46 wakeTimeTextField.text = dateFormatter.string(from: sender.date)}else 47 { 48 let dateFormatter = DateFormatter() 49 dateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "H:mm", options: 0, locale: Locale(identifier: "ja_JP")) 50 textfield2.text = dateFormatter.string(from: sender.date)} 51} 52 53//toolbarのdoneボタン 54@objc func doneBtn(){ 55 wakeTimeTextField.resignFirstResponder() 56} 57} 58
追記です。
swift
1 2 3import UIKit 4class testViewController: UIViewController, UITextFieldDelegate{ 5 6var toolBar:UIToolbar! 7 8 9 @IBOutlet weak var wakeTimeTextField: UITextField! 10 11 @IBOutlet weak var textfield2: UITextField! 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 15 wakeTimeTextField.tag = 1 16 wakeTimeTextField.delegate = self 17 setupToolbar() 18 19 textfield2.tag = 2 20 textfield2.delegate = self 21} 22func setupToolbar() { 23 //datepicker上のtoolbarのdoneボタン 24 toolBar = UIToolbar() 25 toolBar.sizeToFit() 26 let toolBarBtn = UIBarButtonItem(title: "DONE", style: .plain, target: self, action: #selector(doneBtn)) 27 toolBar.items = [toolBarBtn] 28 wakeTimeTextField.inputAccessoryView = toolBar 29} 30 31func textFieldDidBeginEditing(_ textField: UITextField) { 32 if wakeTimeTextField.tag == 1{ 33 let datePickerView:UIDatePicker = UIDatePicker() 34 35 datePickerView.tag = 1//追加 36 37 datePickerView.datePickerMode = UIDatePicker.Mode.date 38 textField.inputView = datePickerView 39 datePickerView.addTarget(self, action: #selector(datePickerValueChanged(sender:)), for: UIControl.Event.valueChanged)}else{ 40 let datePickerView:UIDatePicker = UIDatePicker() 41 42 datePickerView.tag = 2//追加 43 44 45 datePickerView.datePickerMode = UIDatePicker.Mode.time 46 textField.inputView = datePickerView 47 datePickerView.addTarget(self, action: #selector(datePickerValueChanged(sender:)), for: UIControl.Event.valueChanged)} 48} 49 50 //datepickerが選択されたらtextfieldに表示 51@objc func datePickerValueChanged(sender:UIDatePicker) { 52 53 if sender.tag == 1{//変更 54 55 let dateFormatter = DateFormatter() 56 dateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "yMMMdE", options: 0, locale: Locale(identifier: "ja_JP")) 57 wakeTimeTextField.text = dateFormatter.string(from: sender.date)}else 58 { 59 let dateFormatter = DateFormatter() 60 dateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "H:mm", options: 0, locale: Locale(identifier: "ja_JP")) 61 textfield2.text = dateFormatter.string(from: sender.date)} 62} 63 64//toolbarのdoneボタン 65@objc func doneBtn(){ 66 wakeTimeTextField.resignFirstResponder() 67} 68} 69
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/20 08:44
2020/04/20 08:56
2020/04/20 09:24
2020/04/20 09:41
2020/04/20 11:40