前提・実現したいこと
学習のため体重管理アプリを作っていて、体重を入力したら履歴画面のTableViewCellに入力した体重の履歴が表示される機能を作っているのですが、値が表示されない状況です。
該当のソースコード
ちなみにSegmentedControlの摂取カロリーは作成していない状況です。
import UIKit class ViewController: UIViewController { // addViewControllerからnowWeightLabelに表示するデータを受け取る var weightDate:String? @IBOutlet weak var nowWeightLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() guard self.weightDate != nil else { return } // nowWeightLabelのテキストにweightDateを設定 self.nowWeightLabel.text = "(weightDate!)kg" // アプリを再起動してもnowWeightLabelのテキストを保持する為nowWeightLabelのテキストをUserDefaultsに保存する UserDefaults.standard.set(nowWeightLabel.text, forKey: "nowWeightKey") } override func viewDidAppear(_ animated: Bool) { // UserDefaultsにnowWeightLabelのデータがあるか確認する if let _ = UserDefaults.standard.object(forKey: "nowWeightKey") as? String { // データがある場合はnowWeightLabelに表示する nowWeightLabel.text = (UserDefaults.standard.object(forKey: "nowWeightKey") as! String) } } }
import UIKit class historyViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { // tableViewに配列を表示するための変数 var tableViewBox: [String] = [] @IBOutlet var oneView: UIView! @IBOutlet var twoView: UIView! @IBOutlet weak var tableView: UITableView! @IBOutlet weak var segmentedControl: UISegmentedControl! override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self self.view.addSubview(oneView) // デフォルトでは体重記録(weightBox)を表示 tableViewBox = weightBox } override func viewDidAppear(_ animated: Bool) { } func addOneView() { twoView.removeFromSuperview() self.view.addSubview(oneView) } func addtwoView() { oneView.removeFromSuperview() self.view.addSubview(twoView) } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // tableViewBoxにある個数だけ表示 return tableViewBox.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // Cellの表示内容を設定 let Cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) Cell.textLabel!.text = tableViewBox[indexPath.row] return Cell } @IBAction func segmentedControlButton(_ sender: UISegmentedControl) { switch sender.selectedSegmentIndex { case 0: addOneView() // if UserDefaults.standard.object(forKey: "weightBoxKey") != nil { // tableViewBox = UserDefaults.standard.object(forKey: "weightBoxKey") as! [String] // } tableViewBox = weightBox default: break } tableView.reloadData() } }
import UIKit // 体重を格納する変数 var weightBox = [String]() class addViewController: UIViewController { @IBOutlet weak var weightTextField: UITextField! override func viewDidLoad() { super.viewDidLoad() // weightTextFieldの入力方法をナンバーパッドに設定 weightTextField.keyboardType = UIKeyboardType.numberPad } @IBAction func okButton(_ sender: Any) { // weightBoxにweightTextFieldの入力情報を格納 weightBox.append(weightTextField.text!) // weightBoxをUserDefaultsで保存する UserDefaults.standard.set(weightBox, forKey: "weightBoxKey") } // ViewControllerのweightDateにweightTextFieldの入力情報を引き継ぐ override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "Segue" { let vc = segue.destination as! ViewController vc.weightDate = self.weightTextField.text } } }
試したこと
現在改善に向けて調べて試しているのですが、今現在改善していない状況です。
ちなみに改善に向けて試したことが下記のコードです。
ご教示頂けると幸いです。
override func viewDidAppear(_ animated: Bool) { // UserDefaultsにnowWeightLabelのデータがあるか確認する if let _ = UserDefaults.standard.object(forKey: "nowWeightKey") as? String { // データがある場合はnowWeightLabelに表示する nowWeightLabel.text = (UserDefaults.standard.object(forKey: "nowWeightKey") as! String) } }
補足情報(FW/ツールのバージョンなど)
XCode10
セル自体は表示されているけど内容が表示されていない、ということでしょうか?
TableViewCell自体は表示されているのですが、内容が表示されていない状況です。
Cell.textLabel!.text = tableViewBox[indexPath.row]
の上に
print(indexPath.row, tableViewBox[indexPath.row])
を追加して出力を教えて下さい。(長くなる場合は抜粋でいいです)
ご返信ありがとうございます。
実施してみたのですが、printの出力が表示されない状況です。
セル自体が表示されているのであれば出力があるはずですが。
「TableViewCell自体は表示されている」というのはどうやって確認したのでしょうか?
あと、tableViewBoxが空っぽだったりしませんか?
横線が表示されているのでTableViewCell自体は表示されていると確認しました。
historyViewの viewDidAppearに
print(tableViewBox)を追加して確認したところ出力が[]となっていて、tableViewBoxが空っぽと言う事を確認しました。この箇所を探ってみようと思います。
>>横線が表示されているのでTableViewCell自体は表示されていると確認しました。
それはTableView本体ですね。
ご返信ありがとうございます。
そうなのですね、誤って認識していました。
ということはセル自体表示されていない状況です。
あなたの回答
tips
プレビュー