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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

Q&A

0回答

824閲覧

TableViewCellに情報が表示されない

hik_

総合スコア42

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/04/13 01:47

編集2019/04/15 09:35

前提・実現したいこと

学習のため体重管理アプリを作っていて、体重を入力したら履歴画面の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

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

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

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

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

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

fuzzball

2019/04/15 02:13

セル自体は表示されているけど内容が表示されていない、ということでしょうか?
hik_

2019/04/15 08:53

TableViewCell自体は表示されているのですが、内容が表示されていない状況です。
fuzzball

2019/04/15 09:01

Cell.textLabel!.text = tableViewBox[indexPath.row] の上に print(indexPath.row, tableViewBox[indexPath.row]) を追加して出力を教えて下さい。(長くなる場合は抜粋でいいです)
hik_

2019/04/15 09:17

ご返信ありがとうございます。 実施してみたのですが、printの出力が表示されない状況です。
fuzzball

2019/04/15 09:26

セル自体が表示されているのであれば出力があるはずですが。 「TableViewCell自体は表示されている」というのはどうやって確認したのでしょうか? あと、tableViewBoxが空っぽだったりしませんか?
hik_

2019/04/15 09:36

横線が表示されているのでTableViewCell自体は表示されていると確認しました。 historyViewの viewDidAppearに print(tableViewBox)を追加して確認したところ出力が[]となっていて、tableViewBoxが空っぽと言う事を確認しました。この箇所を探ってみようと思います。
fuzzball

2019/04/16 00:18

>>横線が表示されているのでTableViewCell自体は表示されていると確認しました。 それはTableView本体ですね。
hik_

2019/04/18 03:13

ご返信ありがとうございます。 そうなのですね、誤って認識していました。 ということはセル自体表示されていない状況です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問