UICollectionView添加UICollectionCell


Answers:


142

StoryBoard内部只有UICollectionView才具有UICollectionViewCell。如果使用XIB,请使用CellName.xib创建一个新的XIB,向其中添加CollectionViewCell,并指定UICollectionView自定义类的名称。之后,使用registerNib。

示例代码:https : //github.com/lequysang/TestCollectionViewWithXIB


@NAQ好的,您如何使用您的课程?确保已注册链接到类的笔尖,但未调用initWithFrame类。因此,如果您无法在init的xib插座上进行其他样式的设置。在此示例中拥有MyCell类的好处是什么?
topwik

1
initWithFrame在任何Xib单元中均不起作用。将IBOutlet连接到MyCell.h,并在awakeFromNib中调用其他方法。
LE SANG

6
我感到惊讶的是,Apple还不足以在文档中提及这一点。我一生的-1小时。
专家

有什么线索可以说明为什么Apple允许您在自定义XIB中包含UICollectionView,而不是UICollectionViewCells?
Crashalot '16

在它上浪费了3个小时:x
Ankit Srivastava

18

如果您正在使用文件UICollectionViewCellUiCollectionView则不能直接放入Xib。仅在情节提要中才有可能。将A添加UICollectionViewCell到单独的Xib文件中。输入您的班级名称。然后在出现收集视图之前注册class或xib

 [self.collectionView registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:CELL_ID];

通常,此操作在中完成viewDidLoad

这是UICollectionViewCell没有使用的自定义的实现Xib

 @implementation CollectionViewCell
 @synthesize imageView = _imageView;

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {

    self.backgroundColor = [UIColor whiteColor];
    self.layer.shadowColor = [UIColor blackColor].CGColor;
    self.layer.shadowRadius = 5.0f;
    self.layer.shadowOffset = CGSizeMake(2.0f, 2.0f);
    self.layer.shadowOpacity = 0.5f;

    // Selected background view
    UIView *backgroundView = [[UIView alloc]initWithFrame:self.bounds];
    backgroundView.layer.borderColor = [[UIColor colorWithRed:0.529 green:0.808 blue:0.922 alpha:1]CGColor];
    backgroundView.layer.borderWidth = 10.0f;
    self.selectedBackgroundView = backgroundView;

    // set content view
    CGRect frame  = CGRectMake(self.bounds.origin.x+5, self.bounds.origin.y+5, self.bounds.size.width-10, self.bounds.size.height-10);
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame];
    self.imageView = imageView;          
    [imageView release];
    self.imageView.contentMode = UIViewContentModeScaleAspectFill ;
    self.imageView.clipsToBounds = YES;
    [self.contentView addSubview:self.imageView];       

}
return self;
 }

如果您使用要为其分配课程的xib,该怎么办?我有一个UICollectionViewCell类作为我的单元xib的自定义类。我在viewDidLoad中用NibName firCellWithResueIdentifier注册了Nib(再次将xib链接/连接到单元格类)。我可以将Xib布局与使用单元格类在代码中完成的额外自定义结合吗?如果您只注册笔尖,则向上看流程似乎不会在类上调用initWithFrame。我必须在收藏视图中注册笔尖和类吗?
topwik

@towpse将initWithFrame替换为Cell.m中的awakeFromNib。不回头
LE SANG

@towpse NAQ所说的是正确的。注册笔尖。然后,要进行其他自定义,请使用自定义单元格(在cell.m中)的initWithCoder或awakeFromNib
Anil Varghese

感谢你的回答。似乎很奇怪,您可以将UICollectionView添加到自定义XIB,但不能将UICollectionViewCell添加到... ...这是什么原因?
Crashalot

0

好的。如果您真的想在接口构建器的xib文件中将collectionView中的单元格包含在内,则实际上有一个解决方法:

  1. 创建一个情节提要。
  2. 从界面构建器创建UICollectionView和UICollectionViewCell。
  3. 调整带有约束等的用户界面,使其外观完全符合您的期望。
  4. 创建一个新的xib文件。
  5. 将情节提要中的所有内容复制到新的xib文件。

它将完美运行。

  • 要记住的一件事是,第3步非常重要,因为在第5步之后,您不应该在UICollectionView上拖动和移动,如果这样做,该单元将神奇地消失!除此之外,它将完美地工作。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.