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

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

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

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

Swift

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

Q&A

解決済

1回答

827閲覧

[Swift]2つ以上のUICollectionViewのdataSourceをswitch文で管理したい。

ReiYoshizawa

総合スコア0

Xcode

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

Swift

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

0グッド

0クリップ

投稿2021/06/24 04:53

編集2021/06/24 05:05

前提・実現したいこと

現在、映画の情報を取得するアプリを制作しています。
その際に、2つのUICollectionViewを1つのViewControllerの中にを表示させる方法を検討しています。

UICollectionViewDataSourceのメソッドの中で、switch文でCollectionViewを分けて管理したいのですが、うまく行かないことがあったので質問させてください。

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

cellの設定の部分ではうまく情報が反映されているのですが、cellの数やサイズをswitch文で設定してもうまく条件分岐できていないのか同じ情報が反映されてしまいます。

該当のソースコード

swift:ViewController

1extension MovieViewController: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { 2 3 4 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 5 6 switch collectionView { 7 8 case castCollectionView: 9 return .init(width: castCollectionView.frame.width / 4, height: castCollectionView.frame.height) 10 11 case providerLogoCollectonView: 12 return .init(width: providerLogoCollectonView.frame.width / 3, height: providerLogoCollectonView.frame.height) 13 14 default: 15 return .init(width: 0, height: 0) 16 } 17 } 18 19 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 20 21 switch collectionView { 22 23 case castCollectionView: 24 return castData.count 25 26 27 case providerLogoCollectonView: 28 return providerData.count 29 30 default: 31 return 0 32 } 33 } 34 35 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 36 37 switch collectionView { 38 39 case castCollectionView: 40 let cCell = castCollectionView.dequeueReusableCell(withReuseIdentifier: castCellId, for: indexPath) as! CastCell 41 cCell.castItem = castData[indexPath.row] 42 return cCell 43 44 case providerLogoCollectonView: 45 let pCell = providerLogoCollectonView.dequeueReusableCell(withReuseIdentifier: providerCellId, for: indexPath) as! ProviderCell 46 pCell.providerItem = providerData[indexPath.row] 47 return pCell 48 49 default: 50 51 return UICollectionViewCell() 52 53 } 54 } 55 56 57 58}

試したこと

if文での条件分岐も試したのですが、うまく反映されませんでした。

cellForItemAtでのcellの設定はうまく反映してくれたので、同じようにnumberOfItemsInSectionで設定しても2つのCollectionviewで同じcell数になってしまいます。

実例

![イメージ説明
上の画像のように、cellの数とサイズがそれぞれで設定できていません。

switch文の制約が違うのでしょうか。それとも何か致命的な問題があるのでしょうか。

ご回答いただけたら幸いです。

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

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

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

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

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

guest

回答1

0

自己解決

両方のCollectionViewのレイアウトを共通にしていたことが原因でした。
それぞれで設定することで解決しました。

let castCellLayout = UICollectionViewFlowLayout() castCellLayout.scrollDirection = .horizontal castCollectionView.collectionViewLayout = castCellLayout let providerCellLayout = UICollectionViewFlowLayout() providerCellLayout.scrollDirection = .horizontal providerLogoCollectonView.collectionViewLayout = providerCellLayout

該当のソースコードで掲載していた部分とは別の部分でのエラーでした。

投稿2021/06/28 07:11

ReiYoshizawa

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問