显示具有多种不同 UICollectionViewCells 类型的 UICollectionView

Posted

技术标签:

【中文标题】显示具有多种不同 UICollectionViewCells 类型的 UICollectionView【英文标题】:Show UICollectionView with multiple different UICollectionViewCells types 【发布时间】:2014-08-31 19:47:45 【问题描述】:

我正在尝试创建一个具有不同 UICollectionViewCells 的 UICollectionView 我的项目很少,一个有 3 个 UILabel 和 UIIMageView,另一个有 2 个 UIImageViews 和 6 个 UILables 等。

我正在尝试初始化单元格并为每个特定场景添加视图,但这似乎不起作用。 我正在检查是否 cell==nil,然后添加视图(我确实进入了“if”语句)。

如果我在 if 语句中使用“addSubView”,它什么也不做

ResumeFeedCell *cell= (ResumeFeedCell*)[collectionView dequeueReusableCellWithReuseIdentifier:@"ResumeFeedCell" forIndexPath:indexPath];
if (!cell) 
    //init views in the cell and add them
    UIImageView *mediaImage =[[UIImageView alloc] initWithFrame:CGRectMake(0 , 0,530, 560)];
    mediaImage.tag = 12;
    [cell.contentView addSubview:mediaImage];

    UIImageView *typeImage = [[UIImageView alloc] initWithFrame:CGRectMake(0 , 0,150, 150)];
    typeImage.tag = 11;
    [cell.contentView addSubview:typeImage];

    UILabel *textLable = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 530, 560)];
    textLable.tag = 10;
    [cell.contentView addSubview:textLable];



UIImageView *mediaImage = (UIImageView*)[cell.contentView viewWithTag:12];
UIImageView *typeImage = (UIImageView*)[cell.contentView viewWithTag:11];
UILabel *textLable = (UILabel*)[cell.contentView viewWithTag:10];

textLable.text = _bio;
textLable.textAlignment = NSTextAlignmentCenter;
textLable.numberOfLines = 0;
textLable.tag = 10;
textLable.adjustsFontSizeToFitWidth=YES;
textLable.minimumScaleFactor=0.5;

[mediaImage setImageWithURL:[NSURL URLWithString:getImageUrlwithIdAndSize([[[_datasource objectAtIndex:indexPath.row] objectForKey:@"media"] objectAtIndex:0], 1)]];

我尝试了另一种方法,比如:

UIImageView *mediaImage = (UIImageView*)[cell.contentView viewWithTag:12];
if(!mediaImage)mediaImage = [[UIImageView alloc] initWithFrame:CGRectMake(0 , 0,530, 560)];
mediaImage.tag = 12;
[cell.contentView addSubview:mediaImage];


UIImageView *typeImage = (UIImageView*)[cell.contentView viewWithTag:11];
if(!typeImage)typeImage = [[UIImageView alloc] initWithFrame:CGRectMake(0 , 0,150, 150)];
typeImage.tag = 11;
[cell.contentView addSubview:typeImage];

UILabel *textLable = (UILabel*)[cell.contentView viewWithTag:10];

if (!textLable)
    textLable = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 530, 560)];

这似乎工作正常,但我认为它有点丑陋和消耗内存。 因为它为每个项目添加了子视图,这使得它不可重用......

我看到了THIS ANSWER,但我想自定义 cellForItemAtIndexPath。

任何帮助将不胜感激。 发送, 沙哈尔。

【问题讨论】:

【参考方案1】:

回答我自己的问题。

这段代码很好用! 我不得不清理并重建项目。

事实证明,即使在运行该项目 200 次之后,它也无法按应有的方式编译它。

总之,如果某些东西不起作用,则清理项目,它并不总是代码。

【讨论】:

以上是关于显示具有多种不同 UICollectionViewCells 类型的 UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 两个具有相同视图的单元格。第二个单元格不显示任何内容

UICollectionView 中的多种单元格类型

加载具有与其 UICollectionView 不同的 alpha 值的 UICollectionViewCell

如何 UICollectionView 每列具有不同的行

UICollectionView 项目间距不是恒定的

UICollectionView didSelecteItem 委托行为怪异