UICollectionView добавляет UICollectionCell

Когда я пытаюсь поместить UICollectionCell в UICollectionView в Interface Builder, я не могу поместить его по неизвестным причинам. Ячейка идет в панель инструментов без добавления в UICollectionView

Я использую:

  • iOS SDK 6.0
  • XCode 4.5.1
  • Я не использую Storyboard

Ответ 1

Только UICollectionView внутри StoryBoard имеет UICollectionViewCell внутри. Если вы используете XIB, создайте новый XIB с CellName.xib, добавьте в него CollectionViewCell, укажите имя пользовательского класса UICollectionView. После этого используйте registerNib.

Пример кода: https://github.com/lequysang/TestCollectionViewWithXIB

Ответ 2

Вы не можете поместить UICollectionViewCell непосредственно в UiCollectionView, если вы используете файл Xib. Его возможно только в раскадровке. Добавьте UICollectionViewCell в отдельный файл Xib. Дайте свое имя класса. Затем зарегистрируйте либо класс, либо 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;
 }

Ответ 3

Хорошо. На самом деле существует обходное решение для этого, если вы действительно хотели иметь ячейку в коллекцииView внутри xib файла из конструктора интерфейса:

  • Создайте раскадровку.
  • Создайте UICollectionView и UICollectionViewCell из конструктора интерфейса.
  • Отрегулируйте пользовательский интерфейс с ограничениями и т.д., чтобы он выглядел точно так, как вы хотели.
  • Создайте новый xib файл.
  • Скопируйте все внутри раскадровки в новый файл xib.

Он будет работать отлично.

  • Следует иметь в виду, что шаг №3 очень важен, потому что после # 5 вы не должны перетаскивать и перемещаться по UICollectionView, если вы это сделаете, ячейка волшебным образом исчезнет! Кроме этого, он будет работать отлично.