collectionview只填充一个单元格

时间:2014-08-26 10:54:24

标签: ios xcode collectionview

我试图用数组中的数据填充一个集合视图,我检查过它有数据,但在运行时它只填充索引0处的单元格。

集合视图是一个朋友列表,其中包含9个显示照片和名称的项目。部分中的项目数量正常工作,我的意思是,如果数组有3个对象,则集合视图显示三个单元格,但只有第一个单元格显示对象的照片和名称,具体是数组中的最后一个,而不是第一个一。其他细胞显示原型细胞。

我想我错误地收集了集合视图的索引路径,但是我的故事板中还有另一个正常工作。另一个每页只有一个单元格,可能与此有关吗?

我粘贴了我的collectionview方法:

-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
     return 1;
}

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return [self.miListaAmigos count];
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

static NSString *CellIdentifier = @"friendCell";

UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];

UILabel *nameLabel = (UILabel *)[self.view viewWithTag:102];
nameLabel.font = [UIFont fontWithName:@"Ubuntu" size:12.0];
nameLabel.text = [[self.miListaAmigos objectAtIndex:indexPath.row] valueForKey:@"usr_username"];

return cell;
}

3 个答案:

答案 0 :(得分:0)

您不能直接重复使用self.view UILabel

中的UILabel *nameLabel = (UILabel *)[self.view viewWithTag:102];

尝试以下代码来解决您的问题:

   -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *CellIdentifier = @"friendCell";

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];

    if(cell == nil)
    {
      //Create UILabel here
      UILabel *nameLabel=[[UILabel alloc]initWithFrame:CGRectMake(5, 5, 310, 20)];
    nameLabel.tag=100;
     [cell addSubview:nameLabel];
    nameLabel.font = [UIFont fontWithName:@"Ubuntu" size:12.0];
    }

    // Access label and reuse 
    UILabel *nameLabel = (UILabel *)[cell viewWithTag:100];
    nameLabel.text = [[self.miListaAmigos objectAtIndex:indexPath.row] valueForKey:@"usr_username"];

    return cell;
    }

答案 1 :(得分:0)

检查你的collectionView alloc和required deleagte:

UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout。

e.g。

UICollectionViewFlowLayout *collectionLayout = [[UICollectionViewFlowLayout alloc] init];
[collectionLayout setScrollDirection:UICollectionViewScrollDirectionVertical];

UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:collectionLayout];
[collectionView registerClass:[CNCollectionViewCell class] forCellWithReuseIdentifier:cellIndetify];
collectionView.delegate = self;
collectionView.dataSource = self;
[self.view addSubview:collectionView];

答案 2 :(得分:0)

您的标签在self.view中,而不在cell中。您确实应该制作UICollectionViewCell的子类

文件->新建->文件->可可接触类

  • 类别:MYFriendCollectionViewCell
  • UICollectionViewCell的子类
  • 还创建XIB:勾选
  • 语言:目标C

查看MYFriendCollectionViewCell.xib并将标签放在此处...将标签连接到IBOutlet ...不要使用标签...

@property (weak, nonatomic) IBOutlet UILabel *nameLabel;

https://www.youtube.com/watch?v=GusRijNLUGg <-连接IBOutlets

在您的ViewController

中添加以下行

[self.collectionView registerNib:[UINib nibWithNibName:@"MYFriendCollectionViewCell" bundle:nil] forCellWithReuseIdentifier: CellIdentifier];

将您的cellForItem更改为:

static NSString *CellIdentifier = @"friendCell";

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView 
cellForItemAtIndexPath:(NSIndexPath *)indexPath{

    MYFriendCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier: CellIdentifier forIndexPath: indexPath];

    cell.nameLabel.font = nameLabel.font = [UIFont fontWithName:@"Ubuntu" size:12.0]; // This ideally would be in MYFriendCollectionViewCell.m 
    cell.nameLabel.text = [[self.miListaAmigos objectAtIndex:indexPath.row] valueForKey:@"usr_username"];

    return cell;
}