我试图用数组中的数据填充一个集合视图,我检查过它有数据,但在运行时它只填充索引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;
}
答案 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.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;
}