11993


UICollectionViewにUILabel、UIImageViewを描画しています。  
cellForItemAtIndexPathでaddSubViewしているUILabelが  
スクロールするたびに重なってしまう現象で悩んでいます。

※UICollectionView自体はStoryboard上にあり、ReuseIdentifierを設定しています。

subviewを削除するように入れてみても重なってしまいます。  
どこか間違っていますでしょうか？  
アドバイスいただけますと幸いです。

[code]

    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    
    UICollectionViewCell * cell;
    NSString *cellIdentifier = @"newscell";
    cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
    
    for (UIView* view in cell.contentView.subviews)
    {
       [view removeFromSuperview];
    
    }
    
    UILabel *titleLabel = [[UILabel alloc] init];
    UILabel *dateLabel = [[UILabel alloc] init];
    UILabel *textLabel = [[UILabel alloc] init];
    UIImageView *imageView = [[UIImageView alloc] init];
    
    //ここに各Viewのframeなどを設定するコード(割愛)
    
    [cell addSubview:titleLabel];
    [cell addSubview:dateLabel];
    [cell addSubview:textLabel];
    return cell;
    
    }
    
[/code]


CC BY-SA 3.0
2015-07-03T08:25:23.710
11992
2015-07-06T05:41:47.723
2015-07-03T08:41:38.547
8772
8772
question
ios objective-c uicollectionview
UICollectionViewをスクロールすると描画が重なってしまう

[code]

    //ここに各Viewのframeなどを設定するコード(割愛)
    
    // [cell addSubview:titleLabel];
    [cell.contentView addSubView: titleLabel];
    // [cell addSubview:dateLabel];
    [cell.contentView addSubView: dateLabel];
    // [cell addSubview:textLabel];
    [cell.contentView addSubView: textLabel];
    return cell;
    
    }
    
[/code]

このように変更したら、どうなりますか？


CC BY-SA 3.0
2015-07-03T08:34:31.367
11993
2015-07-03T08:34:31.367
7362
11992
answer


-cellForItemAtIndexPath: の中で -addSubview: するのをそもそもやめた方がいいと思います。  
UICollectionViewCell のサブクラスを作成し、サブクラスの初期化時にラベルを生成、プロパティとしましょう。  
そうすることで subviews を removeFromSuperview する余計な処理もいらなくなります。

上記を行った上で -cellForItemAtIndexPath: の中で行うのは「ラベルの表示内容の変更」としましょう。


CC BY-SA 3.0
2015-07-06T05:41:47.723
12069
2015-07-06T05:41:47.723
7376
11992
answer