

CollectionViewのセルに`cellForItemAtIndexPath`が呼ばれるたび、毎回違ったidentifierを持たせたいのですが、やり方が分かりません。もしくはできないのでしょうか？  
例えば最初の画面読み込みで、ある`identifier`を持った再利用可能なセルを30個生成し、次に画面が読み込まれた時は別の`identifier`を持った再利用可能なセルを30個生成するといったようなことです。

[code]

    CalendarCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
    
[/code]

`cellForItemAtIndexPath`メソッド内の上記の行で、「`must register a nib or a class for the
identifier or connect a prototype cell in a
storyboard'`」とエラーが返ってきます。（上記の行の`identifier`には画面が読み込まれるたびに違う文字列が入ります。）しかし`Storyboard`の`Collection
Reusable
View`の`Identifier`にはあらかじめ指定した一つの文字列しか入れることができないので、`cellForItemAtIndexPath`内の`identifier`と`Collection
Reusable View`の`identifier`を一致させることができません。  
なので、どうすれば都度都度違った`identifier`を持ったセルを生成することができるでしょうか？  
どなたか分かる方がいれば教えていただきたいです。すみませんが、よろしくお願いします。


CC BY-SA 3.0
2015-06-05T03:29:23.873
10993
2015-06-05T08:58:10.463
2015-06-05T04:49:14.197
5210
5210
question
ios xcode uicollectionview uicollectionviewcell
CollectionViewのセルに毎回違ったidentifierを持たせる


下図のようにStoryboardで、Collection ViewのAttributes Inspectorで、 **Items**
の値を変えれば、CellのIdentifierを複数作ることができます。Itemを2にすると、Collection
ViewのCellのプロトタイプが2つになることがわかります。

![画像の説明をここに入力](https://i.stack.imgur.com/QPvzQ.png)

質問者さんの意図に添えないまま終わってしまいましたが、私の回答をこのまま削除するのも、もったいない気がするので、「
**セルをタップするたびに、セルが入れ替わるプログラム** 」のサンプルを掲載して、回答を完結させておこうと思います。（Swiftにて失礼）

Storyboard上で、セルのプロトタイプを7つ作り、`Identifier`をそれぞれ`CellA`、`CellB`、〜、`CellF`、`CellG`とします。

![画像の説明をここに入力](https://i.stack.imgur.com/YmRep.png)

`ViewController`のコードを編集します。

[code]

    import UIKit
    
    class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
        // セルのIdentifierを配列で定数化しておく。
        let identifiers: [String] = ["CellA", "CellB", "CellC", "CellD", "CellE", "CellF", "CellG"]
        // 配列identifiersのなん番目かを示す整数型の変数。
        var num: Int = 0
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        // Collection ViewのDatasourceとDelegate
        func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
            return 1
        }
    
        func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return 30 // セルの個数は30固定
        }
    
        func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
            // num番目のIdentifierのセルを配置する。
            let cell = collectionView.dequeueReusableCellWithReuseIdentifier(identifiers[num], forIndexPath: indexPath) as! UICollectionViewCell
            return cell
        }
    
        func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
            // セルをタップするごとにCellA→CellB→〜→CellF→CellG→CellA→CellB→〜と切り替わる。
            num = (num + 1) % 7
            collectionView.reloadData()
        }
    
    }
    
[/code]

![画像の説明をここに入力](https://i.stack.imgur.com/CggSC.png)


CC BY-SA 3.0
2015-06-05T03:47:53.383
10994
2015-06-05T08:58:10.463
2015-06-05T08:58:10.463
7362
7362
10993
answer