22631


プログラミング初心者です。  
現在学習中のswiftの参考書では、1画面に1つのUICollectionViewを実装する方法は  
紹介されているのですが、1画面に複数のUICollectionViewを実装する方法は、  
紹介されていません。  
(他の参考書やウェブサイトなどで探したのですが見つかりませんでした)  
1画面に複数のUICollectionViewの実装方法や参考になるサイトなどご存知でしたら、  
ご教示頂けますでしょうか。宜しくお願い致します。


CC BY-SA 3.0
2016-02-28T08:24:20.353
22628
2016-03-25T20:01:35.093
14329
question
swift xcode swift2 uicollectionview uicollectionviewcell
1画面に複数のUICollectionViewの実装方法


本家の[stackoverflow](https://stackoverflow.com/)から"multiple uicollectionview in
one controller"と言ったキーワードで引っかかってきたものから2つほど紹介しておきます。

こちらで正解とされているのは、UICollectionViewの複数セクション機能を使った方が良いのではないかという提案とその際のコード例です。  
[How can I have multiple Collection Views in one View
Controller?](https://stackoverflow.com/questions/30003870/how-can-i-have-
multiple-collection-views-in-one-view-controller)

こちらは単にUICollectionViewDelegate,
UICollectionViewDataSourceを実装する全メソッドにif文を入れて、どっちのUICollectionView用に働けば良いのか判定すれば良いよというもの。(類似の質問・回答が多数見つかりました。)  
[Multiple collectionView in a UIViewController - IOS
swift](https://stackoverflow.com/questions/28750108/multiple-collectionview-
in-a-uiviewcontroller-ios-swift)

どちらも英語の部分はほとんど読まなくても、コードを眺めればどんな回答を示されているのかほぼ分かるのではないかと思います。私的には、たとえ不完全でも自分なりのコード例を示そうとしている点や、図なども使って自分の意図をできるだけ具体的に示そうとしている点など、「良い質問」の書き方([こちら日本語版stackoverflowのヘルプ](https://ja.stackoverflow.com/help/how-
to-ask)も大変参考になりますが)としても参照していただきたいように思います。


CC BY-SA 3.0
2016-02-28T09:05:21.733
22631
2016-02-28T09:05:21.733
2017-05-23T12:38:56.083
-1
13972
22628
answer


# 1\. UICollectionViewDataSourceを複数作る

[code]

        class dataSource1 : NSObject, UITableViewDataSource
        {
        （略）
        }
    
        class dataSource2 : NSObject, UITableViewDataSource
        {
        （略）
        }
    
[/code]

のようにdataSourceのクラスを複数作り、

[code]

    collectionView1.dataSource = dataSource1()
    collectionView2.dataSource = dataSource2()
    
[/code]

とします。

# 2\. UICollectionViewに別々のtagを付け、dataSourceのメソッド内で分岐する

StoryboardでcollectionViewにタグをつけます。そして

[code]

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
        if( tableView.tag == 1000 )
        {
            return numberOfRows1()
        }
    
        if( tableView.tag == 2000 )
        {
            return numberOfRows2()
        }
    
        return 1
    }
    
[/code]

のようにします。


CC BY-SA 3.0
2016-03-22T06:00:04.637
23337
2016-03-25T20:01:35.093
2016-03-25T20:01:35.093
14631
14631
22628
answer