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

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

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

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

Swift

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

Q&A

解決済

1回答

384閲覧

UITableViewでセルの中身の数に合わせて行数を指定したい

gusiken0604

総合スコア10

Xcode

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

Swift

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

0グッド

0クリップ

投稿2022/09/19 09:22

前提

クイズアプリを作成しています。
お気に入りに指定した問題を取得後、行数の指定ができません

実現したいこと

  • お気に入りの問題数に合わせてセルの行数を指定する

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

お気に入り問題の配列を作成した後、行数メソッドのカウントに反映できません

該当のソースコード

swift

1import UIKit 2 3class BookmarkViewController: UIViewController,UITableViewDelegate,UITableViewDataSource{ 4 5 var csvArray: [String] = []//CSVを入れる箱 6 var quizArray: [String] = [] 7 var quizCount = 0 8 var mondaiID = "0" 9 var touroku = "0" 10 var tablegyosu = 0 11 var cellArray:[String] = [] 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 //print("お気に入りフラグ1\(touroku)") 16 17 18 //csv読み込むブロック 19 csvArray = loadCSV(fileName: "quiz0")//quiz0.csv固定 20 quizArray = csvArray[quizCount].components(separatedBy: ",") 21 //print("クイズカウント\(quizCount)") 22 mondaiID = quizArray[10] 23 let touroku = UserDefaults.standard.string(forKey: mondaiID) 24 // print("お気に入りフラグ2\(touroku!)") 25 // print(quizArray[10]) 26 27 28 if touroku == "1" { 29 cellArray += [quizArray[0]] 30 //print("お気に入りフラグifff\(touroku!)") 31 } else { 32 nextQuiz() 33 } 34 35 }// viewDidLoad終わり 36 37 //次の問題を表示させるブロック 38 func nextQuiz(){ 39 //tablegyosu += 1 40 //print("行数\(tablegyosu)") 41 quizCount += 1 42 print("クイズカウント\(quizCount)")//1 43 44 if quizCount < csvArray.count { 45 quizArray = csvArray[quizCount].components(separatedBy:",") 46 mondaiID = quizArray[10] 47 print(mondaiID) 48 let touroku = UserDefaults.standard.string(forKey: mondaiID) 49 //print(cellArray) 50 if touroku == "1" { 51 cellArray += [quizArray[0]] 52 print(cellArray) 53 //tablegyosu += 1 54 //print("行数\(tablegyosu)") 55 } else { 56 //owari = 1 57 nextQuiz() 58 } 59 } 60 61 } 62 63 //CSV読み込むブロック 64 func loadCSV(fileName: String) -> [String] { 65 let csvBundle = Bundle.main.path(forResource: fileName, ofType:"csv")! 66 do { 67 let csvData = try String(contentsOfFile: csvBundle,encoding: String.Encoding.utf8) 68 let lineCange = csvData.replacingOccurrences(of: "\r",with:"\n") 69 csvArray = lineCange.components(separatedBy:"\n") 70 csvArray.removeLast() 71 } catch { 72 print("エラー") 73 } 74 return csvArray 75 } 76 77 //テーブルの行数を指定するメソッド(必須) 78 func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int { 79 //return tablegyosu 80 return cellArray.count 81 } 82 83 //セルの中身を設定するメソッド(必須) 84 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 85 86 let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell0", for: indexPath) 87 cell.textLabel!.text = quizArray[0]//[indexPath.row] 88 nextQuiz() 89 return cell 90 91 92 } 93 94 95} 96

試したこと

問題数をカウントした変数を指定しても1行しか実装できなかった
問題だけの配列を新たに作成して、カウントしても1行しか実装できなかった

補足情報(FW/ツールのバージョンなど)

storyboardで作成
Xcode13.4.1
問題はcsvから取得

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/09/19 13:11

ごめんなさい、コードからアプリの仕様を理解しようとしたのですが、難しいです・・ 一度不要な変数を削除して、該当のソースコードを修正していただくことは可能でしょうか? それからできればnextQuizの再起呼び出しは普通にforを使うことでも実現できそうに思いますので、forを使った形に修正していただくことは可能でしょうか? そのようなシンプルな形に修正する過程で、ご自身で問題を解決できてしまうこともありますので、面倒かもしれませんが、よろしくお願いします。
guest

回答1

0

自己解決

ありがとうございます。
おっしゃる通りにfor文へ修正後、期待通りの動きをする事ができました。
ただ別の問題が出て解決できなかったので、結局nextQuizを使っています、すみません。
修正前はセルの中身を設定するメソッド内で、nextQuizを使用して配列を作成していたのが悪かったようです。
ほとんどコピペで作っていたので、シンプルな形に直す発想が無かったです。
勉強になりました。
ありがとうございました。

swift

1import UIKit 2 3class BookmarkViewController: UIViewController,UITableViewDelegate,UITableViewDataSource{ 4 5 var csvArray: [String] = []//CSVを入れる箱 6 var quizArray: [String] = [] 7 var quizCount = 0 8 var mondaiID = "0" 9 var touroku = "0" 10 var cellArray:[String] = [] 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 15 //csv読み込むブロック 16 csvArray = loadCSV(fileName: "quiz0")//quiz0.csv固定 17 quizArray = csvArray[quizCount].components(separatedBy: ",") 18 //print("クイズカウント\(quizCount)") 19 mondaiID = quizArray[10] 20 let touroku = UserDefaults.standard.string(forKey: mondaiID) 21 22 if touroku == "1" { 23 cellArray += [quizArray[0]] 24 } else { 25 nextQuiz() 26 } 27 }// viewDidLoad終わり 28 29 //次の問題を表示させるブロック 30 func nextQuiz(){ 31 quizCount += 1 32 if quizCount < csvArray.count { 33 quizArray = csvArray[quizCount].components(separatedBy:",") 34 mondaiID = quizArray[10] 35 print(mondaiID) 36 let touroku = UserDefaults.standard.string(forKey: mondaiID) 37 //print(cellArray) 38 if touroku == "1" { 39 cellArray += [quizArray[0]] 40 print(cellArray) 41nextQuiz()//追加 42 } else { 43 nextQuiz() 44 } 45 } 46 47 } 48 49 //CSV読み込むブロック 50 func loadCSV(fileName: String) -> [String] { 51 let csvBundle = Bundle.main.path(forResource: fileName, ofType:"csv")! 52 do { 53 let csvData = try String(contentsOfFile: csvBundle,encoding: String.Encoding.utf8) 54 let lineCange = csvData.replacingOccurrences(of: "\r",with:"\n") 55 csvArray = lineCange.components(separatedBy:"\n") 56 csvArray.removeLast() 57 } catch { 58 print("エラー") 59 } 60 return csvArray 61 } 62 63 //テーブルの行数を指定するメソッド(必須) 64 func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int { 65 return cellArray.count 66 } 67 68 //セルの中身を設定するメソッド(必須) 69 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 70 71 let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell0", for: indexPath) 72cell.textLabel!.text = cellArray[indexPath.row] 73 //cell.textLabel!.text = quizArray[0]//ここが悪かった 74 //nextQuiz() //ここが悪かった 75 return cell 76 } 77 78}

投稿2022/09/20 17:41

gusiken0604

総合スコア10

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

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

gusiken0604

2022/09/20 17:45

他の質問のようにベストアンサーを指定する事ができませんでした。 xg63ex2b様、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問