11677


現在`ViewController`に`UICollectionView`を二つ置き、一つの`UICollectionView`はカスタムセルを使っています。カスタムセルには`UILabel`を一つ置いており、これに文字列を入れて表示させようとしているのですが、セルには何も表示されません。カスタムセルのUIを定義している`xib`ファイルの名前は「WeekPlanCell」で、`nibWithNibName`メソッドの引数と一致しています。WeekPlanCellというクラスを作り、そのヘッダファイルに`WeekPlanCell.xib`にある`UILabel`を紐付けています。そして`Storyboard`の`Collection
Reusable
View`の`identifier`には「afterDayCell」と入力しており、`cellForItemAtIndexPath`の`dequeueReusableCellWithReuseIdentifier`の引数の文字列と一致しています。  
また、`Storyboard`のカスタムセルを用いた`UICollectionView`のセルの`Custom
Class`のClassには「WeekPlanCell」と入力しています。  
上記の手順でどこが間違っているのでしょう？  
どなたか分かる方がいれば教えていただきたいです。  
すみませんが、よろしくお願いします。

[code]

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        [self initCustomCell];
    }
    
    - (void)initCustomCell {
        UINib *nib = [UINib nibWithNibName:@"WeekPlanCell" bundle:nil];
        [self.collectionView registerNib:nib forCellWithReuseIdentifier:@"afterDayCell"];
    }
    
    - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
    {
        if (collectionView == self.collectionView) {
            return 1;
        } else {
            return 1;
        }
    }
    
    - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
        if (collectionView == self.collectionView) {
            return 1;
        } else {
            return 6;
        }
    }
    
    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
        UICollectionViewCell *cell;
    
        if (collectionView == self.collectionView) {
            cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"todayCell" forIndexPath:indexPath];
        } else {
            cell = [self.afterDayCollectionView dequeueReusableCellWithReuseIdentifier:@"afterDayCell" forIndexPath:indexPath];
    
            WeekPlanCell *weekPlanCell = (WeekPlanCell*)cell;
            weekPlanCell.layer.borderWidth = 0.4f;
            weekPlanCell.layer.borderColor = [UIColor blackColor].CGColor;
    
            weekPlanCell.label.text = @"book";
        }
    
        return cell;
    }
    
[/code]


CC BY-SA 3.0
2015-06-24T07:31:42.133
11672
2015-06-24T09:01:40.190
5210
question
ios objective-c xcode uicollectionview uicollectionviewcell
CollectionViewのカスタムセルに何も表示ができない


`UICollectionView` でカスタムセルを実装する方法は：

  1. `UICollectionViewCell` をサブクラス化し、ビューのレイアウトもコードで行う
  2. `UICollectionViewCell` をサブクラス化し、ビューのレイアウトは xib ファイルで行う
  3. `UICollectionViewCell` をサブクラス化し、ビューのレイアウトは、Storyboard で配置した Collection View の中の、Collection View Cell を編集して行う

の 3 つになるかな、と思います。

質問文では、2 と 3 の方法を重複して使われているように見えるのですが、本来どちらの方法を使われたいのでしょうか？

* * *

この部分で：

[code]

    [self.collectionView registerNib:nib forCellWithReuseIdentifier:@"afterDayCell"];
    
[/code]

`self.afterDayCollectionView`
に対して呼び出されるべきなのではないかな、と思われるカスタムセルの登録が、`self.collectionView` に対して行われています。

この場合は、Storyboard で設定した方の内容が反映される（3 の方法）と思うので、Storyboard の Collection View Cell
内で `UILabel` が配置されていなかったり、outlet の接続ができていないと、何も表示されないと思うのですが、いかがでしょうか。

2 の方法を使われる場合は、Storyboard
上のカスタムセルの設定を削除して、引用させていただいた部分のコードを修正すれば、解決できるのではないかと思います。


CC BY-SA 3.0
2015-06-24T09:01:40.190
11677
2015-06-24T09:01:40.190
2299
11672
answer