🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Xcode

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

Swift

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

Q&A

2回答

1449閲覧

tableviewcellに日付を表示できない

marogura

総合スコア21

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/12/20 13:58

前提・実現したいこと

userdefaultsで保存した日付をtableviewcellの中のtextfieldに表示させたい

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

一通りコードを書いてみたが、cellには何も表示されませんでした。お手数ですが、誰かお力をください!

該当のソースコード

import UIKit class DatePickerViewController: UIViewController { //UIDatePickerを定義するための変数 var datePicker: UIDatePicker = UIDatePicker() @IBOutlet weak var dateField: UITextField! override func viewDidLoad() { super.viewDidLoad() // ピッカー設定 datePicker.datePickerMode = UIDatePicker.Mode.date datePicker.timeZone = NSTimeZone.local datePicker.locale = Locale.current dateField.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へ代入) dateField.inputView = datePicker dateField.inputAccessoryView = toolbar } // UIDatePickerのDoneを押したら発火 @objc func done() { dateField.endEditing(true) let ud = UserDefaults.standard ud.setValue(dateField.text, forKey: "datelist") ud.synchronize() // 日付のフォーマット let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd" dateField.text = "(formatter.string(from: datePicker.date))" } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }

該当のソースコード

ソースコード import UIKit class CustomTableViewCell: UITableViewCell { var starwars: String = "" @IBOutlet weak var booo: UITextField! @IBOutlet weak var oh: UILabel! override func awakeFromNib() { super.awakeFromNib() let ud = UserDefaults.standard starwars = ud.string(forKey: "datelist")! print(starwars) booo.text = String(starwars) } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) } }

該当のソースコード

import UIKit class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { /// セルの個数を指定するデリゲートメソッド func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 0 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { return UITableViewCell() } /// セルに値を設定するデータソースメソッド(必須) private func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // セルを取得 let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell") as! CustomTableViewCell return cell } @IBOutlet weak var tableview: UITableView! override func viewDidLoad() { super.viewDidLoad() } }

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

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

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

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

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

guest

回答2

0

いくつかおかしいところがあります。

Swift

1// UIDatePickerのDoneを押したら発火 2@objc func done() { 3 dateField.endEditing(true) 4 5 let ud = UserDefaults.standard 6 ud.setValue(dateField.text, forKey: "datelist") 7 ud.synchronize() 8 // 日付のフォーマット 9 let formatter = DateFormatter() 10 formatter.dateFormat = "yyyy-MM-dd" 11 dateField.text = "(formatter.string(from: datePicker.date))" 12}

保存されていない理由は、この順番がおかしくないですか?
datePickerから取り出して、dateField.textに表示する と 
dateField.textの値をuserdefaultsに保存する が逆じゃないですか?

なので、空(nilもしくは"")の状態で保存をしようとしているので、
きちんと保存されないのではないでしょうか?

投稿2019/12/21 04:33

hameji

総合スコア1380

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

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

0

デバッグの基本。
各メソッドにprint文を追加し、どのメソッドが実行されているのかを確認してください。

・"numberOfRowsInSection"メソッドの戻り値がゼロなので、UITableViewに表示されるセルはゼロ(何も表示されない)。
・"cellForRowAtIndexPath"は古いSwiftの形式で、"cellForRowAt indexPath:"の方が今の形式。
・"cellForRowAtIndexPath"はprivateなので、ViewControllerクラス内でしか利用できませんし、ViewControllerクラス内のどこからも呼んでいないので、CustomTableViewCellは生成されません。

投稿2019/12/20 19:53

dsuzuki

総合スコア1682

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問