刚开始使用UICollectionView
。我使用IB在UICollectionView
中创建了一个简单的UIViewController
。它通过分页水平滚动。我在UICollectionViewCell
内放置了一个简单的UICollectionView
。我为单元格设置了重用标识符。
我在UILabel
内放置了一个标记为100的UICollectionViewCell
。
在viewDidLoad
中,我致电:
[_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Thing"];
稍后我尝试像这样初始化单元格:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Thing" forIndexPath:indexPath];
cell.backgroundColor = [UIColor greenColor];
UILabel *nameLabel = (UILabel *)[cell viewWithTag:100];
nameLabel.text = @"Bogus";
return cell;
}
当我运行应用程序时,视图正确加载;我可以水平滚动通过2个单元格。我看到每个细胞都有丑陋的绿色。
但是,viewWithTag
方法返回nil
,因此未设置nameLabel文本。
为什么?
请注意,我还尝试定义UICollectionViewCell
的自定义子类并使用它调用registerClass。在IB中,我将单元格类更改为自定义子类,并将UILabel
绑定到子类中的UILabel
出口。
但这也行不通。 (我宁愿避免使用自定义子类方法,因为似乎没有必要定义只是为了保存IBOutlets
。)
我想我在这里遗漏了一些明显的东西。
此处描述的类似问题:
Trouble accessing Image from instance of UICollectionViewCell
答案 0 :(得分:26)
删除registerClass行。你是在故事板上做的,所以你不需要它。
答案 1 :(得分:1)
试试吧
UILabel *nameLabel = (UILabel *)[cell.contentView viewWithTag:100];
更新
您可以查看单元格的层次结构及其所有子视图标记:[self showAllSubView:cell] ;
,您是否可以找到带有标记10的标签?
- (void)showAllSubView:(UIView *)view
{
for (UIView * subView in [view subviews]) {
NSLog(@"%@, tag:%d", subView, subView.tag) ;
[self showAllSubView:subView] ;
}
}