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

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

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

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

254閲覧

Swift : TableViewにCellが表示されない

Amuy

総合スコア50

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

1クリップ

投稿2020/02/18 08:52

編集2020/02/18 08:55

前提・実現したいこと

ゲームを作成しています
自分の持っているアイテムをTableViewに表示させるプログラムを書いたのですが、前までcellが表示されていたのに、急に表示されなくなってしまいました...

該当のソースコード

Swift

1import UIKit 2 3class ViewControllerBag: UIViewController, UITableViewDelegate, UITableViewDataSource { 4 @IBOutlet weak var DBTableView: UITableView! 5 6 var dbCells = [String]() 7 var dbImageArray: [String] = ["Thunder","Speed5","Speed10","Speed15","Invisible5","Invisible10","Invisible15","ATKRise","Shield","Electrical","BallSpeed"] 8 var dbTitleArray: [String] = ["カミナリ","瞬足5","瞬足10","瞬足15","透明5","透明10","透明15","攻撃力上昇","防御","鈍足のカミナリ","豪速球"] 9 var dbLetterArray: [String] = ["ランダムで、敵のライフを1減らす","5秒間、足が速くなる","10秒間、足が速くなる","15秒間、足が速くなる","5秒間、透明になる","10秒間、透明になる","15秒間、透明になる","一回だけボールの攻撃力がUP","一回だけボールを防げる","ランダムで、敵の足を遅くする","一回だけボールのスピードがUP"] 10 var arrayNum = 0 11 var count = 1 12 var deathblowNameArrayUD = UserDefaults.standard 13 //var dbArrayEmptyUD = UserDefaults.standard 14 var cellIndex = "" 15 var dbNum = 0 16 var dbNameUD = [String]() 17 18 override func viewDidLoad() { 19 super.viewDidLoad() 20 DBTableView.delegate = self 21 DBTableView.dataSource = self 22 DBTableView.register(UINib(nibName: "CustomTableViewCell", bundle: nil), forCellReuseIdentifier: "CustomCell") 23 24 } 25 26 // View構築後の処理 27 override func viewDidAppear(_ animated: Bool) { 28 super.viewDidAppear(animated) 29 dbCells = (deathblowNameArrayUD.array(forKey: "DeathBlowArray") as? [String]) ?? [] 30 if dbCells.isEmpty == true { 31 debugPrint("空") 32 noItemAlert() 33 }else { 34 debugPrint("空ではない") 35 print(dbCells) 36 } 37 } 38 39 func numberOfSections(in tableView: UITableView) -> Int { 40 return 1 41 } 42 43 44 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 45 //セルの個数を指定するデリゲートメソッド(必須) 46 return dbCells.count 47 } 48 49 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 50 51 let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomTableViewCell 52 // セルに表示する細かいこと 53 arrayNum = dbTitleArray.firstIndex(of: dbCells[indexPath.row])! 54 cell.accessoryType = UITableViewCell.AccessoryType.disclosureIndicator 55 cell.TableSubLabel.textColor = #colorLiteral(red: 0.501960814, green: 0.501960814, blue: 0.501960814, alpha: 1) 56 cell.TableSubLabel.text = String(dbLetterArray[arrayNum]) 57 cell.backgroundColor = #colorLiteral(red: 0.6991055012, green: 0.8119484782, blue: 0.8208540082, alpha: 1) 58 59 cell.TableImage.image = UIImage(named: dbImageArray[arrayNum]) 60 cell.TableLabel.text = dbCells[indexPath.row] 61 cell.TableLabel.textColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1) 62 tableView.separatorColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1) 63 64 return cell 65 } 66 67 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 68 print("(indexPath.row)番目のcellがタップされた") 69 // セルの選択を解除 70 tableView.deselectRow(at: indexPath, animated: true) 71 //(indexPath.row)を入れる 72 cellIndex = dbImageArray[(indexPath.row)] 73 print("セルインデックス" + String(cellIndex)) 74 dbNum = (indexPath.row) 75 //BagDetailに遷移 76 performSegue(withIdentifier: "BagDetails", sender: nil) 77 } 78 79 override func prepare(for segue:UIStoryboardSegue, sender: Any? ) { 80 if let vcBagDetails = segue.destination as? ViewControllerBagDetails { 81 vcBagDetails.cellIndex2 = cellIndex 82 vcBagDetails.dbNum2 = dbNum 83 } 84 } 85 86 func noItemAlert (){ 87 print("アラート表示") 88 // アラートを作成 89 let alert = UIAlertController( 90 title: "TA・SU・KE", 91 message: "バッグにアイテムがありません。\nこの画面を閉じます", 92 preferredStyle: .alert) 93 94 let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler:{ 95 // ボタンが押された時の処理を書く(クロージャ実装) 96 (action: UIAlertAction!) -> Void in 97 print("OK") 98 self.performSegue(withIdentifier:"BackMenu", sender: nil) 99 }) 100 101 alert.addAction(defaultAction) 102 103 // アラート表示 104 self.present(alert, animated: true, completion: nil) 105 } 106} 107

前回投稿したときに、全て載せた方が良いとのことでしたので、全て載せさせていただきました
見にくくてすみません

Print

"空ではない"
["カミナリ", "瞬足5"]
↑持っているアイテムによって変わります

試したこと

前回の質問で教えてもらったViewDidAppearで使っているlet dbCells = (deathblowNameArrayUD.array(forKey: "DeathBlowArray") as? [String]) ?? []
のプログラムで、letだからcellを作成するところで使うdbCellが変わっていないのではないかと思い、letを無くしました。dbCells = (deathblowNameArrayUD.array(forKey: "DeathBlowArray") as? [String]) ?? []

補足情報

Xcode 11.2.1
シュミレーター iPhone8

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問や回答のコードは閉じたり開いたりできるので、ぜんぜん見にくくないです。むしろ、ソースを全部貼っていただけるとそのまま Xcode にコピペできるのでたいへん答えやすいです。
で、let は確かに不要でしたね。失礼しました。

cell が表示されない件ですが、viewDidAppear で dbCells に値を代入した後に DBTableView.reloadData() を呼べば直ると思います。これは、viewDidAppear では cell が表示済みのため、その後に cell の内容を変更して表示を更新するには DBTableView.reloadData() を呼ぶ必要があるからです。
というか、viewDidAppear で表示を更新すると、いったん真っ白の画面が現れてから cell がパッと表示されると思うので、dbCells への代入を viewDidLoad でやった方がいいかも。この場合は DBTableView.reloadData() は不要のはずです。

swift

1 override func viewDidLoad() { 2 super.viewDidLoad() 3 DBTableView.delegate = self 4 DBTableView.dataSource = self 5 DBTableView.register(UINib(nibName: "CustomTableViewCell", bundle: nil), forCellReuseIdentifier: "CustomCell") 6 7 // セルの値を準備 8 dbCells = (deathblowNameArrayUD.array(forKey: "DeathBlowArray") as? [String]) ?? [] 9 } 10 11 // View構築後の処理 12 override func viewDidAppear(_ animated: Bool) { 13 super.viewDidAppear(animated) 14 if dbCells.isEmpty == true { 15 debugPrint("空") 16 noItemAlert() 17 }else { 18 debugPrint("空ではない") 19 print(dbCells) 20 } 21 }

投稿2020/02/18 09:30

hoshi-takanori

総合スコア7895

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

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

Amuy

2020/02/18 10:03

dbCellsへの代入を、ViewDidLoadで行ったらうまくいきました。 かなり悩んでいたので本当に助かりました! 本当にありがとうございますm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問