使用nib定义UICollectionViewCell

hpi*_*que 14 iphone interface-builder ios uicollectionview uicollectionviewcell

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

然而,当我拖动UICollectionViewCell到Interface Builder时,没有提到contentViewbackgroundView.如果我添加子视图,那些将整个单元格作为其父级,而不是contentViewbackgroundView.

那么UICollectionViewCell用IB 定义一个正确的方法是什么?

rde*_*mar 14

"如果我添加子视图,那些将整个单元格作为其父级,而不是contentView"

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

现在,就背景视图而言,我认为您无法从IB访问这些内容.您可以使用带有UIView的xib文件,然后将其分配给单元格的backgroundView属性.

  • 半真.我曾经尝试过这个,但是没有用.但是,我拖了一个UIView并将类型更改为UICollectionViewCell子类.它只有在您完全按照您所说的方式执行操作时才会起作用:从库中拖动UIColllectionViewCell然后更改类型.非常hacky. (2认同)

hpi*_*que 7

由于缺乏一个更好的选择的,我使用了单独的榫文件contentViewbackgroundView.然后在我的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;
}
Run Code Online (Sandbox Code Playgroud)