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

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

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

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

Q&A

解決済

1回答

463閲覧

コレクションビューの中にテーブルビューを入れたい

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

1クリップ

投稿2023/02/17 07:00

実現したいこと

コレクションビューを使ったアプリを作っています。
このコレクションビューの中に テーブルビュー を入れたいです。
(テーブルビューにはカスタムセルを使いたい)

前提

コレクションビュー初心者です。(初めてです)

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

テーブルビューの接続ができません。

該当のソースコード

Swift

1 2import UIKit 3 4class TestCollectionViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, UITableViewDelegate, UITableViewDataSource { 5 6 // ================================================================================ 7 // モデル: 8 // ================================================================================ 9 struct StudentInfo: Codable, Equatable, Comparable { 10 var name: String 11 var secondName: String 12 var age: Int 13 14 // ソートの為:型を統一する 15 static func == (lhs: StudentInfo, rhs: StudentInfo) -> Bool { 16 return lhs.name == rhs.name 17 } 18 19 // ソートの為:ソートの定義を決める 20 // ここではアルファベット順とする 21 static func < (lhs: StudentInfo, rhs: StudentInfo) -> Bool { 22 return lhs.name < rhs.name 23 } 24 } 25 26 27 // 変数 28 var student_display_array: [StudentInfo] = [] 29 30 31 // segue 32 var receiveStudentName: String = "" 33 34 35 override func viewDidLoad() { 36 super.viewDidLoad() 37 38 // APIから情報取得 39 let StudentInfos = StudentInfo(name: name, secondName: secondName, age: age) 40 41 // 表示用の配列に追加 42 self.student_display_array.append(StudentInfos) 43 44 let searchStudentName = self.receiveStudentName 45 let resultStudentInfos = student_display_array.filter { 46 $0.name.contains(searchStudentName) 47 } 48 49 // ここでテーブルビューに表示する用の構造体に追加する 50 self.student_display_array = resultStudentInfos 51 52 print("----------------------------") 53 print("resultStudentInfosは") 54 print(resultStudentInfos) 55 print("----------------------------") 56 57 } 58 } catch { 59 print("-----------------------") 60 print(error.localizedDescription) 61 print("-----------------------") 62 } 63 } 64 65 // ========================================= 66 // カスタムセル登録 67 // ========================================= 68 tableView.register(UINib(nibName: "CustomTableViewCell", bundle: nil), forCellReuseIdentifier: "CustomTableViewCell") 69 70 } 71 72 73 // MARK: - CollectionView 74 // 数 75 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 76 return 10 77 } 78 // 中身 79 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 80 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) 81 cell.backgroundColor = .blue 82 return cell 83 } 84 85 // サイズ 86 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 87 return CGSize(width:self.view.frame.width / 2, height:200) 88 } 89 90 // MARK: - UITableView 91 // 数 92 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 93 return student_display_array.count 94 } 95 96 // 中身 97 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 98 99 let cell = tableView.dequeueReusableCell(withIdentifier: "CustomTableViewCell", for: indexPath) as! CustomTableViewCell 100 101 cell.id.text = "\(indexPath.row+1)" 102 103 cell.studentName.text = student_display_array[indexPath.row].name 104 cell.studentSecondName.text = student_display_array[indexPath.row].secondeName 105 106 return cell 107 } 108}

試したこと

・テーブルビューのカスタムセル登録をすると Reference to member 'register' cannot be resolved without a contextual type

・テーブルビューを接続すると error: Illegal Configuration: The tableView outlet from the TestCollectionViewController to the UITableView is invalid. Outlets cannot be connected to repeating content.

2つめのエラー内容をググると https://easyramble.com/outlet-error-in-repeating-content.html のブログがヒットしますが少し内容が違ってあまり参考になりませんでした。

聞きたいこと

・コレクションビューの中にテーブルビューが設置できるかどうか
・設置できる場合はなぜ上記のエラーが出るのか知りたいです。

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

コレクションビューが初めてなのでお手柔らかにお願いいたします。

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

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

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

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

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

hoshi-takanori

2023/02/17 21:55

コレクションビューの中にテーブルビューを設置、できなくはないと思いますが、 ・コレクションビューは横スクロールですけ? 両方とも縦スクロールだと混乱する気が… ・コレクションビューのセルの数だけテーブルビューが存在することになりますが、どんなデータを表示するのでしょうか? ・コレクションビューとテーブルビューそれぞれのセルはどんな構造ですか? カスタムクラスとか作るなら、その中身は?
退会済みユーザー

退会済みユーザー

2023/02/18 06:25

【返信①】 > ・コレクションビューは横スクロールですけ? 両方とも縦スクロールだと混乱する気が… 縦×縦での実装を目指しています。 (コレクションビューを使わずにテーブルビューを並べた限りでは `体感`, `目視` では特に混乱しなかったです.. )
退会済みユーザー

退会済みユーザー

2023/02/18 06:26

【返信②】 > ・コレクションビューのセルの数だけテーブルビューが存在することになりますが、どんなデータを表示するのでしょうか? はい。 表示するデータは ・ID ・苗字 ・名前 のラベルだけになります。
退会済みユーザー

退会済みユーザー

2023/02/18 06:27

【返信③】 > ・コレクションビューとテーブルビューそれぞれのセルはどんな構造ですか? カスタムクラスとか作るなら、その中身は? コレクションビューのセルは普通 or カスタムセルで中にテーブルビューを入れた作りになります。 テーブルビューのセルはカスタムセルになります。 表示内容は上記に記載した通りになります。
hoshi-takanori

2023/02/18 08:57

うーん、よく分かりません。コレクションビューの各セルにテーブルビューが入るってことは、例えばコレクションビューのセルが10個あって、それぞれのテーブルビューにさらにセルが10個ずつあると、トータル10*10=100人分のデータを表示することになりますよね。 これを縦に並べたらコレクションビューとテーブルビューのどっちをスクロールしたいか分からなくなると思いますが…。 あと、この10*10のデータはどう分類されてて、どうやって持つつもりですか?
退会済みユーザー

退会済みユーザー

2023/03/04 06:54

> あと、この10*10のデータはどう分類されてて、どうやって持つつもりですか? イメージとしては学校のクラス名簿みたいな感じです それぞれ構造体で保持する予定です。 // クラス情報 struct Room: Codable { var grade: String var class: String } // 生徒情報 struct StudentInfo: Codable { var name: String var secondName: String var age: Int }
hoshi-takanori

2023/03/04 07:16

Room と StudentInfo の関係は? (普通に考えると Room が StudentInfo の配列を持つのでは?) また、テーブルビューだけで、Room をセクションにすれば充分な気が…。
退会済みユーザー

退会済みユーザー

2023/03/06 07:19

デザインの問題からこの様な形を採用しています。 section + TableViewだと縦1列でのデータ表示になるかと思いますが、横2列かける縦n列は可能なのでしょうか??
hoshi-takanori

2023/03/06 10:13

テーブルビューは縦1列ですね。で、コレクションビューの各セルにテーブルビューを持たせる場合、コレクションビューの各セルをテーブルビューの dataSource かつ delegate にするのが自然かと…。
guest

回答1

0

ベストアンサー

別のデザインで解決することにしました。
コメントありがとうございます。

解決策が質問内容とは全く違う内容だったので回答の記載は差し控えます。

投稿2023/03/18 14:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問