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, если вы это сделаете, ячейка волшебным образом исчезнет! Кроме этого, он будет работать отлично.