初めて利用させていただきます。
2ヶ月前からネットの情報を頼りにSwiftを触りはじめました。
質問に至らぬ点があるかもしれませんが、どうぞよろしくお願いいたします。
前提・実現したいこと
一番上の「日時」のTableViewCellをクリックしたら、別ファイルで指定しているDatePickerを立ち上げて日時を入力し、セルに表示したい。
現在はTextFieldに出力していますが、枠線が気になるのでこれを非表示にするか、セルに直接表示する方法があれば合わせて教えていただきたいです。
DatePickerはこちらのサイトを参考に記述しました。
発生している問題
現在はTableViewCell内のTextFieldをクリックするとDatePickerが立ち上がり、日時を指定してDoneでTextFieldに出力されます。
ViewControllerとは別のTableViewCellのファイルでDatePickerを指定しており、どのようなコードを書けばいいのかわからなくなってしまいました。
そもそも、コードのどの部分がDatePickerの立ち上がりを指定しているのかも把握できておりません。
該当のソースコード
AddPlanViewController.Swift
Swift
1import UIKit 2 3class AddPlanViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 4 5 // キャンセルボタン 6 @IBAction func cancelButton(_ sender: Any) { 7 self.dismiss(animated: true, completion: nil) 8 } 9 10 var planItem = ["日時","参加者","場所","共有開始","通知"] 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 15 // タイトル文字列の設定 16 self.navigationItem.title = "予定を追加" 17 } 18 19 func tableView(_ tableView: UITableView, cellForRowAt indexPath:IndexPath) -> UITableViewCell { 20 var cell: UITableViewCell 21 if indexPath.row == 0 { 22 cell = tableView.dequeueReusableCell(withIdentifier: "DateAndTimeCell", for:indexPath) as UITableViewCell 23 24 } else { 25 cell = tableView.dequeueReusableCell(withIdentifier: "ParticipantCell", for:indexPath) as UITableViewCell 26 } 27 cell.textLabel?.text = planItem[indexPath.row] 28 return cell 29 } 30 31 func tableView(_ tableView: UITableView, numberOfRowsInSection section:Int) -> Int { 32 return planItem.count 33 } 34 35 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 36 print("(indexPath.row)番セルをタップ") 37 tableView.deselectRow(at: indexPath, animated: true) // セルの選択を解除 38 39 if indexPath.row == 0 { 40 // 0番セル(日時)クリックで DatePicker を表示したい 41 } 42 } 43}
DateAndTimeCell.Swift
こちらでセル内のTextFieldを紐付け、Datepickerの指定もしています。
Swift
1import UIKit 2 3class DateAndTimeCell: UITableViewCell { 4 @IBOutlet weak var displayDateAndTime: UITextField! 5 var datePicker: UIDatePicker = UIDatePicker() 6 7 override func awakeFromNib() { 8 super.awakeFromNib() 9 10 // ピッカー設定 11 datePicker.datePickerMode = UIDatePicker.Mode.dateAndTime 12 datePicker.timeZone = NSTimeZone.local 13 datePicker.locale = Locale.current 14 displayDateAndTime.inputView = datePicker 15 16 // 決定バーの生成 17 let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 40)) 18 let spacelItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) 19 let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(done)) 20 toolbar.setItems([spacelItem, doneItem], animated: true) 21 22 // インプットビュー設定(紐づいているUITextfieldへ代入) 23 displayDateAndTime.inputView = datePicker 24 displayDateAndTime.inputAccessoryView = toolbar 25 } 26 27 @objc func done() { 28 displayDateAndTime.endEditing(true) 29 30 // 日付のフォーマット 31 let formatter = DateFormatter() 32 33 //日本仕様で日付の出力 34 formatter.timeStyle = .short 35 formatter.dateStyle = .full 36 formatter.locale = Locale(identifier: "ja_JP") 37 38 //datePickerで指定した日付が表示される 39 displayDateAndTime.text = "(formatter.string(from: datePicker.date))" 40 } 41 42 override func setSelected(_ selected: Bool, animated: Bool) { 43 super.setSelected(selected, animated: animated) 44 } 45}
試したこと
didSelectRowAt部分をいじってみましたが、何をすればいいかわからず断念しました。
補足情報(FW/ツールのバージョンなど)
Xcode Version 10.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/17 09:56