Определение UICollectionViewCell с помощью наконечника
Если я правильно понимаю, содержимое UICollectionViewCell
должно войти в его свойство contentView
и фон в backgroundView
.
Тем не менее, когда я перетаскиваю UICollectionViewCell
в Interface Builder, не упоминается contentView
или backgroundView
. Если я добавлю subviews, у них будет целая ячейка как ее родительская, а не contentView
или backgroundView
.
Каков правильный способ определения UICollectionViewCell
с IB, тогда?
Ответы
Ответ 1
"Если я добавлю subviews, они будут иметь целую ячейку как ее родительскую, а не contentView"
Это неверно. Если вы перетаскиваете элемент UICollectionViewCell и добавляете к нему элементы пользовательского интерфейса, вы добавляете их в представление содержимого. Тот факт, что он не отображается в списке объектов, не означает, что он не существует (то же самое верно для NSBox - он имеет представление контента, которое также не отображается в IB). Если в collectionView: didSelectItemAtIndexPath:, вы регистрируете cellForItemAtIndexPath и смотрите на его subviews, вы найдете только одно, и это то же самое, что вы получаете, регистрируя cell.contentView. Если вы занесете свои подпункты, вы увидите свои элементы пользовательского интерфейса.
Теперь, если смотреть в фоновом режиме, я не думаю, что вы можете получить доступ к IB. У вас может быть xib файл с UIView, а затем назначить его свойству cellView.
Ответ 2
Из-за отсутствия лучшего варианта я использую отдельные файлы nib для contentView
и 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;
}
Ответ 3
Я не уверен, что это новое для Xcode 8, но UICollectionViewCell
включает выходы для подключения backgroundView
и selectedBackgroundView
.
![введите описание изображения здесь]()
Благодаря этому вы можете добавить UIView
(или подкласс) в ячейку просмотра коллекции и подключить его к одному из выходов. Таким образом, вы сможете определить их с помощью IB.
![введите описание изображения здесь]()
Надеюсь, это поможет!