如果我理解正确,UICollectionViewCell
的内容应该放在其contentView
属性中,背景应放在backgroundView
中。
然而,当我将UICollectionViewCell
拖到Interface Builder时,没有提及contentView
或backgroundView
。如果我添加子视图,则会将整个单元格作为其父级,而不是contentView
或backgroundView
。
用IB定义UICollectionViewCell
的正确方法是什么?
答案 0 :(得分:14)
“如果我添加子视图,那些将整个单元格作为其父级,而不是contentView”
事实并非如此。如果您拖入UICollectionViewCell并向其添加UI元素,则将它们添加到内容视图中。事实上它没有出现在对象列表中并不意味着它不存在(NSBox也是如此 - 它有一个内容视图,也没有出现在IB中)。如果在collectionView:didSelectItemAtIndexPath:中,您记录了cellForItemAtIndexPath,并查看其子视图,您只找到一个,它与您通过记录cell.contentView得到的相同。如果您记录其子视图,那么您将看到您的UI元素。
现在,就背景视图而言,我认为您无法从IB访问这些内容。您可以使用带有UIView的xib文件,然后将其分配给单元格的backgroundView属性。
答案 1 :(得分:7)
由于缺少更好的选项,我正在为contentView
和backgroundView
使用单独的nib文件。然后在我的UICollectionViewCell
子类中:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
NSArray *contentViewNib = [[NSBundle mainBundle] loadNibNamed:@"CollectionViewCellContentView" owner:self options:nil];
[self.contentView addSubview:contentViewNib[0]];
NSArray *backgroundViewNib = [[NSBundle mainBundle] loadNibNamed:@"CollectionViewCellBackgroundView" owner:self options:nil];
self.backgroundView = backgroundViewNib[0];
}
return self;
}
答案 2 :(得分:1)