15

如果我理解正确, a 的内容UICollectionViewCell应该进入它的contentView属性和背景backgroundView中。

然而,当我将 a 拖到UICollectionViewCellInterface Builder 时,并没有提到contentViewor backgroundView。如果我添加子视图,它们会将整个单元格作为其父级,而不是contentViewor backgroundView

UICollectionViewCell那么,用 IB定义 a 的正确方法是什么?

4

3 回答 3

15

“如果我添加子视图,它们会将整个单元格作为其父级,而不是 contentView”

这不是真的。如果您拖入 UICollectionViewCell,并向其中添加 UI 元素,您就是将它们添加到内容视图中。它没有出现在对象列表中的事实并不意味着它不存在(NSBox 也是如此——它有一个内容视图也没有出现在 IB 中)。如果在 collectionView:didSelectItemAtIndexPath: 中,您记录 cellForItemAtIndexPath,并查看它的子视图,您只会找到一个,这与您通过记录 cell.contentView 获得的相同。如果您记录其子视图,那么您将看到您的 UI 元素。

现在,就背景视图而言,我不认为这是您可以从 IB 访问的内容。您可以拥有一个带有 UIView 的 xib 文件,然后将其分配给单元格的 backgroundView 属性。

于 2012-11-17T05:11:33.617 回答
7

由于没有更好的选择,我为contentView和使用单独的 nib 文件backgroundView。然后在我的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;
}
于 2012-11-16T15:51:57.000 回答
1

我不确定这是否是 Xcode 8 的新功能,但UICollectionViewCell包括用于连接backgroundViewselectedBackgroundView.

在此处输入图像描述

多亏了这一点,您可以将一个UIView(或子类)添加到您的集合视图单元格并将其连接到任一插座。这样您就可以使用 IB 定义它们。

在此处输入图像描述

希望这可以帮助!

于 2017-02-13T01:06:49.160 回答