#ios #objective-c #uicollectionview
#iOS #objective-c #uicollectionview
Вопрос:
Я пытаюсь добавить нижний колонтитул в представление моей коллекции, но он сбой с 'the view returned from -collectionView:viewForSupplementaryElementOfKind:atIndexPath (UICollectionElementKindSectionFooter,<NSIndexPath: 0xc000000000000016> {length = 2, path = 0 - 0}) was not retrieved by calling -dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath: or is nil ((null))'
В viewDidLoad:
[self.collectionView registerClass:[FooterView class]forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"FooterView"];
Вот мой код.
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind: (NSString *)kind atIndexPath: (NSIndexPath *)indexPath {
UICollectionReusableView *reusableView = nil;
if (kind == UICollectionElementKindSectionFooter) {
FooterView *footerView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"FooterView" forIndexPath:indexPath];
CGFloat width = footerView.frame.size.width;
UIColor *kfbBlue = [UIColor colorWithRed:8.0/255.0f green:77.0/255.0f blue:139.0/255.0f alpha:1];
UIButton *moreButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
moreButton.backgroundColor = [UIColor clearColor];
[moreButton setTitle:@"More" forState:UIControlStateNormal];
[moreButton setTitleColor:kfbBlue forState:UIControlStateNormal];
moreButton.titleLabel.textAlignment = NSTextAlignmentCenter;
moreButton.titleLabel.font = [UIFont fontWithName:@"FranklinGothicStd-ExtraCond" size:25.0];
moreButton.frame = CGRectMake(width / 2 - 25, 0, 50, 50);
moreButton.layer.cornerRadius = 25.0;
moreButton.layer.borderWidth = 2.0f;
moreButton.layer.borderColor = kfbBlue.CGColor;
moreButton.clipsToBounds = YES;
moreButton.backgroundColor = [UIColor clearColor];
[moreButton addTarget:self action:@selector(loadMoreImages) forControlEvents:UIControlEventTouchUpInside];
[footerView addSubview:moreButton];
if (loaded == YES) {
reusableView = footerView;
}
}
return reusableView;
}
Комментарии:
1. Вы регистрировались
FooterView
в UICollectionView с помощьюregisterClass:forSupplementaryViewOfKind:withReuseIdentifier:
или с помощью непосредственно в раскадровке?2. Я только что добавил его и обновил свой вопрос, чтобы отразить другое сообщение об ошибке.
3. Что такое «загруженное» значение? У вас это не указано в предоставленном вами фрагменте. Однако, я думаю, вам это там не нужно 🙂
4. Какова цель
if (loaded ==YES) {
? Вы не можете выбрать возвратnil
в этом методе, это вызовет исключение. Если вы не хотите иметь нижний колонтитул в каком-либо случае, вернитесьCGSizeZero
изreferenceSizeForFooterInSection
метода в этом случае.5. Удаление кода для loaded решило проблему.